龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

Visual C++编程技巧小结

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
1. 如何获取应用程序的实例句柄? 应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用AfxGetInstancdHandle获得句柄. Example: HANDLE hInstance=AfxGetInstanceHandle(); 2. 如何通过代码获得应用程

1. 如何获取应用程序的实例句柄?

   应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用AfxGetInstancdHandle获得句柄.


Example: HANDLE hInstance=AfxGetInstanceHandle(); 

   2. 如何通过代码获得应用程序主窗口的指针?

   主窗口的 指针保存在CWinThread::m_pMainWnd中,调用 AfxGetMainWnd实现。

AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //使程序最大化. 

   3. 如何在程序中获得其他程序的 图标?

   两种方法:

   (1) SDK函数 SHGetFileInfo 或使用 ExtractIcon获得图标资源的 handle,

   (2) SDK函数 SHGetFileInfo获得有关文件的 很多信息,如大小图标,属性,类型等.

   Example(1): 在程序窗口左上角显示 NotePad图标.

void CSampleView: OnDraw( CDC * pDC )
{
  if( :: SHGetFileInfo(_T("c:pwin95 otepad.exe"),0,&stFileInfo,sizeof(stFileInfo),SHGFI_ICON))
  {
   pDC ->DrawIcon(10,10,stFileInfo.hIcon);
  }

   Example(2): 同样功能,Use ExtractIcon Function

void CSampleView:: OnDraw(CDC *pDC)
{
  HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);
  if (hIcon &&hIcon!=(HICON)-1)
   pDC->DrawIcon(10,10,hIcon);

   说明: 获得notepad.exe 的路径正规上来说用GetWindowsDirectory 函数得到,如果是调用 win95下的画笔,应该用访问注册表的方法获得其路径,要作成一个比较考究的程序,考虑应该全面点.

   4. 如何编程结束应用程序?如何编程控制windows 的重新引导?

   这是个很简单又是编程中经常要遇到的问题.

   第一问,向窗口发送 WM_CLOSE消息,调用 CWnd::OnClose成员函数.允许对用户提示是否保存修改过的数据.

Example: AfxGetMainWindow()->SendMessage(WM_CLOSE); 

   还可以创建一个自定义的函数 Terminate Window

void Terminate Window(LPCSTR pCaption)
{
  CWnd *pWnd=Cwnd::FindWindow(NULL,pCaption);
  if (pWnd)
   pWnd ->SendMessage(WM_CLOSE);

   说明: FindWindow 函数不是提倡的做法,因为它无法处理标题栏自动改变,比如我们要检测 Notepad 是不是已运行而事先不知道Notepad 的标题栏,这时 FindWindow 就无能为力了,可以通过枚举 windows 任务列表的办法来实现。 在 机械出版社"Windows 95 API 开发人员指南"一书有比较详细的介绍,这里就不再多说乐。

   第二问,Use ExitWindowsEx Function 函数控制系统是重新引导,还是重启 windows.

   前面已经有人讲过乐,就不再提了。

精彩图集

赞助商链接