一、如何在程序中获得其他程序的图标?

void CHsView::OnDraw(CDC* pDC)
{
    HICON hIcon = ::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);
 if(hIcon && hIcon !=(HICON) -1)
 {
  pDC->DrawIcon(10,10,hIcon);
 }
 CHsDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 // TODO: add draw code for native data here
}

二、如何编程结束应用程序?

AfxGetMainWnd()->SendMessage(WM_CLOSE);

三、如何获得应用程序的实例句柄?

HANDLE hInstance=AfxGetInstanceHandle();

四、怎样加载其他的应用程序?

三个SDK函数 WinExec, ShellExecute,CreateProcess可以使用。WinExec最简单,两个参数,前一个指定路径,后一个指定显示方式.后一个参数值得说一下,比如泥用 SW_SHOWMAXMIZED方式去加载一个无最大化按钮的程序,就是Neterm,calc等等,就不会出现正常的窗体,但是已经被加到任务列表里了。

WinExec("D://PowerWord 2006//Xdict.exe",SW_SHOWMAXIMIZED);
ShellExecute较 WinExex灵活一点,可以指定工作目录,下面的Example就是直接打开 c:/temp/1.txt,而不用加载与 txt文件关联的应用程序,很多安装程序完成后都会打开一个窗口,来显示Readme or Faq,我猜就是这么作的啦.
ShellExecute(NULL,NULL,_T("1.txt"),NULL,_T("c://temp"),SW_SHOWMAXMIZED)

注意:C://TEMP//1.TXT必须存在才能打开
CreateProcess最复杂,一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等.来看个很简单的Example:
 STARTUPINFO stinfo
//启动窗口的信息
 PROCESSINFO procinfo //进程的信息
 CreateProcess(NULL,_T("notepad.exe"),NULL,NULL,FALSE,NORMAL_PRIORITY_ CLASS,NULL,NULL, &stinfo,&procinfo)

五、确定应用程序的路径?

TCHAR exeFullPath[MAX_PATH]; //

GetModuleFileName(NULL,exeFullPath,MAX_PATH); // exeFullPath的内容就是函数返回的结果

六、获得各种目录信息

Windows目录: Use "GetWindowsDirectory"
Windows下的system目录: Use "GetSystemDirectory"
temp目录: Use "GetTempPath"
当前目录: Use "GetCurrentDirectory"
请注意前两个函数的第一个参数为目录变量名,后一个为缓冲区后两个相反

TCHAR exeFullPath[MAX_PATH];
     GetWindowsDirectory(exeFullPath,MAX_PATH);
     GetSystemDirectory(exeFullPath,MAX_PATH);
     GetTempPath(MAX_PATH,exeFullPath);
     GetCurrentDirectory(MAX_PATH,exeFullPath);

可以按F5逐步调试,观察exeFullPath值的变化.

七、如何访问预定义的GDI对象

void CHsView::OnDraw(CDC* pDC)
{
 CHsDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 // TODO: add draw code for native data here
 //Determine size of view.
 CRect reView;
 GetClientRect(reView);
 // Use stock black pen and stock gray brush to draw ellipse.
 pDC->SelectStockObject(BLACK_PEN);
 // Draw the ellipse.
 pDC->Ellipse(reView);
}
//也可以调用新的SDK函数GetSysColorBrush获取一个系统颜色刷子,下例用背景色在视窗中画一个椭圆:
void CHsView::OnDraw(CDC* pDC)
{
 CHsDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 // TODO: add draw code for native data here
 //Determine size of view.
 CRect reView;
 GetClientRect(reView);
 // Use background color for tooltips brush.
 CBrush *pOrgBrush = pDC->SelectObject(CBrush::FromHandle(::GetSysColorBrush(COLOR_INFOBK)));
 // Draw the ellipse.
 pDC->Ellipse(reView);
 // Restore original brush.
 pDC->SelectObject(pOrgBrush);
}

八、当向列表框中添加多个项时如何防止闪烁

//Disable redrawing.
pListBox->SetRedraw (FALSE);
//Fill in the list box gere
//Enable drwing and make sure list box is redrawn.
pListBox->SetRedraw (TRUE);
pListBox->Invalidate ();

九、如何更新翻转背景颜色的文本

调用CDC:: SetBkMode并传送OPAQUE用当前的背景颜色填充背景,或者调用CDC::SetBkMode并传送TRANSPAARENT使背景保持不变,这两种方法都可以设置背景模式。下例设置背景模式为TRANSPARENT,可以两次更新串,用花色带黑阴影更新文本。黑色串在红色串之后,但由于设置了背景模式仍然可见

void CHsView::OnDraw(CDC* pDC)
{
 CHsDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 // TODO: add draw code for native data here
 //Determint size of view.
  CRect rcView;
  GetClientRect(rcView);
  //Create sample string to display.
  CString str (_T ("Awesome Shadow Text..."));
  //Set the background mode to transparent.
  pDC->SetBkMode(TRANSPARENT);
  //Draw black shadow text.
  rcView.OffsetRect (1, 1);
  pDC->SetTextColor (RGB (0, 0, 0));
  pDC->DrawText (str, str.GetLength (), rcView, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  //Draw red text.
  rcView.OffsetRect (-1,-1);
  pDC->SetTextColor (RGB (255, 0, 0));
  pDC->DrawText (str, str.GetLength (), rcView, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}

十、如何检索原先的Task Manager应用程序使用的任务列表

原先的Task Manager应用程序显示顶层窗口的列表。为了显示该列表,窗口必须可见、包含一个标题以及不能被其他窗口拥有。调用CWnd:: GetWindow可以检索顶层窗口的列表,调用IsWindowVisible、GetWindowTextLength以及GetOwner可以确定窗口是否应该在列表中。下例将把TaskManager窗口的标题填充到列表中。

void GetTadkList(CListBox *list)
{
 CString strCaption;
 // Caption of window.
 list->ResetContent();
 // Clear list box.
 // Get first Window in window list.
 ASSERT_VALID(AfxGetMainWnd());
 CWnd *pWnd = AfxGetMainWnd()->GetWindow(GW_HWNDFIRST);
 // Walk window list.
 while(pWnd)
 {
  // I window visible,has a captio,and does not have an owner?
  if(pWnd->IsWindowVisible() && pWnd->GetWindowTextLength() && !pWnd->GetOwner())
  {
   // Add caption o window to list box.
   pWnd->GetWindowText(strCaption);
   list->AddString(strCaption);
  }
  // Get next window in window list.
  pWnd = pWnd->GetWindow(GW_HWNDNEXT);
 }
}
void CAboutDlg::OnButton1()
{
 // TODO: Add your control notification handler code here
    GetTadkList(&m_list); // 在窗体上添加一个ListBox控件,并设置其这量为Control m_list
 //CreateProcess(NULL,_T("notepad.exe"),NULL,NULL.FALSE,NORMAL_PRIORITY_ CLASS,NULL,NULL, &stinfo,&procinfo);
}

十一、MessageBox与AfxMessageBox的区别:

在我的程序的某些部分,我可以调用 MessageBox 函数来建立一个信息对话框,例如在视类中。但是,在其它部分我却不能,如文档类中。为什么?我怎样才能在我的应用程序类中建立一个信息对话框?
    MessageBox函数来自CWnd类,所以你只能在从CWnd继承的类( 如CView )中调用它。但是,MFC 也提供了 AfxMessageBox 函数,你可以在任何地方调用它。

十二、虚拟函数PreCreateWindow是干什么用的?

PreCreateWindow 允许你在调用 CreateWindow 之前来改变窗口属性。

VC知识库之应用控制相关推荐

  1. VC知识库的一篇文章

    给浮躁的软件业同仁 转载自:VC知识库的文章 版权所有:不知道 以下文章都是经典,看不看随你的便,我只希望知识掌握在更多中国人的手里! 中国有很多小朋友,他们18,9岁或 21,2 岁,通过自学也写了 ...

  2. vc与matlab联合,浅析VC与Matlab联合编程(二) - VC知识库文章

    浅析VC与Matlab联合编程(二) 作者:邓科 下载源代码 在"浅析VC与Matlab联合编程 (一)"中简单介绍了VC与matcom的接口编程,实现了VC调用matcom的一个 ...

  3. VC正则表达式的使用(《VC知识库》)

    很久没有VCKbase发表文章了,这次发表一些比较基础的文章吧!看过"保证你现在和未来不失业的十种关键技术"这篇文章了吧,这次我就拿出一个不会让你失业的编程技术讲讲吧,老虾们千万不 ...

  4. VC++ 用setsockopt()来控制recv()与send()的超时

    在send(),recv()过程中有时由于网络状况等原因,收发不能预期进行,而设置收发超时控制: 以下是来自于网上一篇文章中的摘录,它是这样写的: int nNetTimeout=1000;//1秒, ...

  5. VC知识库视频大讲坛系列之GDI GDI+从入门到精通

    第1章 <GDI GDI+从入门到精通视频> 第1节<GDI GDI+从入门到精通>前言 第2节<GDI GDI+从入门到精通>第一讲 第3节<GDI GDI ...

  6. VC++网络资源集合

    http://www.jizhuomi.com/software/257.html     第一部分:VS2010/MFC开发环境     第二部分:VS2010/MFC应用程序框架     第三部分 ...

  7. VC小技巧(三)视图

    VC小技巧(三)视图 1. 如何得到视图指针 [ 问题提出] 现在你有一个多线程的Demo, 你想在多线程里处理视图指针里的函数, 我们给这个函数起个名字:Put(); 该如何实现呢? // 有两种方 ...

  8. Outlook式样界面菜单和页面控制

    本文将介绍两个可复用的C++类:CXTOutlookBar 和 CXTPagerCtrl,用它们可以实现Outlook风格的用户界面,这两个类出自Codejock软件公司,是其产品Xtreme Too ...

  9. Windows消息机制VC

    在Windows中,用户或系统中所发生的任何活动被当作事件来处理,例如,用户按下了鼠标按钮,就产生一鼠标事件.对于所发生的每一个事件,Windows将其转换成消息的形式放在一个称为消息队列的内存区中, ...

最新文章

  1. 只用一次+ 求三个整数之和
  2. 恒驰机器人_机器人如何造恒驰?探秘最牛汽车生产基地
  3. 连续设置多张背景图片并且平铺
  4. SAP CRM中间件Object出现wait状态的原因调试
  5. python哲学翻译_Python
  6. Python基础:获取迭代器下一项目的常见操作
  7. ?php $postsperpage=9;?,php – 如何在自定义WP_Query Ajax上实现分页
  8. WebSocket知识点总结
  9. 众MVP对本书的赞誉
  10. cad截图软件_AutoCAD电气制图协会线上CAD学习打卡活动结束
  11. delphi pid判断进程结束_有两个这样的进程:僵尸进程amp;孤儿进程,蓝瘦香菇
  12. 103 解决粘包问题
  13. TeleportUltra_1.65_PortableSoft离线浏览利器-扒网页神器
  14. 使用 cajViewer 将 caj文件 转换 pdf文件
  15. Kibana关联ES查询数据
  16. iOS学习笔记-018.舒尔特表游戏
  17. 打印机显示无法连接计算机,网络打印提示:Windows无法连接到打印机,请检查打印机名并重试...
  18. 给你的UIView添加个炫彩边框
  19. 设备智能维保:企业生产过程中的问题及解决方案
  20. C#,图像二值化(04)——全局阈值的凯勒算法(Kittler Thresholding)及源程序

热门文章

  1. Android 计时器实现
  2. 大容量光传输技术进展与 400G C+L 系统研究
  3. SetCapture GetCapture ReleaseCapture
  4. 【破解利器】反汇编工具 and 反编译(Decompilers)
  5. Android 后台开发
  6. 电气火灾监控系统在杭州湾新区产业园区一期的设计与应用——安科瑞 陆琳钰
  7. Apriori算法例子
  8. graphQL入门分享
  9. 如何使用餐饮互动游戏进行拓客?餐饮加盟h5线下互动游戏能收获什么?
  10. P1129 [ZJOI2007] 矩阵游戏