获取程序窗口与图标:VC编程技巧

需积分: 0 4 下载量 98 浏览量 更新于2024-08-02 收藏 224KB DOC 举报
"这篇文章主要涵盖了在VC++编程中常见的几个问题,包括获取应用程序主窗口的指针、确定应用程序路径、获取其他程序的图标以及获得系统目录信息的方法。这些问题的解答对于理解和操作Windows环境下C++应用的底层机制至关重要。" 1)获取应用程序主窗口的指针: 在VC++中,可以通过CWinThread类的成员变量`m_pMainWnd`来获取应用程序的主窗口指针。通常,可以使用全局函数`AfxGetMainWnd()`来间接访问这个指针。例如,要最大化主窗口,可以这样写: ```cpp AfxGetMainWnd()->ShowWindow(SW_SHOWMAXIMIZED); ``` 2)确定应用程序的路径: 利用Windows API中的`GetModuleFileName`函数,可以获取当前运行的可执行文件的完整路径。为了得到应用程序的路径而不包括可执行文件名,需要对返回的路径字符串进行处理,移除最后一个文件名部分。 ```cpp TCHAR exeFullPath[MAX_PATH]; GetModuleFileName(NULL, exeFullPath, MAX_PATH); ``` 3)在程序中获取其他程序的图标: 有两种方式实现此功能: - 使用SDK函数`SHGetFileInfo`,它可以获取文件的图标和其他信息。 - 使用`ExtractIcon`函数直接从可执行文件中提取图标资源。 示例1,使用`SHGetFileInfo`: ```cpp void CSampleView::OnDraw(CDC* pDC) { SHFILEINFO stFileInfo; if (::SHGetFileInfo(_T("c:\\pwin95\\notepad.exe"), 0, &stFileInfo, sizeof(stFileInfo), SHGFI_ICON)) { pDC->DrawIcon(10, 10, stFileInfo.hIcon); } } ``` 示例2,使用`ExtractIcon`: ```cpp void CSampleView::OnDraw(CDC* pDC) { HICON hIcon = ::ExtractIcon(AfxGetInstanceHandle(), _T("NotePad.exe"), 0); if (hIcon && hIcon != (HICON)-1) pDC->DrawIcon(10, 10, hIcon); } ``` 4)获取各种目录信息: - 获取Windows目录:可以使用`GetWindowsDirectory`函数。 - 获取Windows下的System目录:可以使用`GetSystemDirectory`函数。 ```cpp TCHAR windowsDir[MAX_PATH]; GetWindowsDirectory(windowsDir, MAX_PATH); TCHAR systemDir[MAX_PATH]; GetSystemDirectory(systemDir, MAX_PATH); ``` 这些基本的函数和技巧是开发Windows应用程序时经常用到的,它们帮助开发者深入操作系统内部,实现更精细的控制和定制。在实际编程过程中,还需要考虑更多的细节,比如错误处理、资源管理以及适应不同环境的兼容性问题。