Visual C++编程技巧:获取句柄,主窗口指针,图标与程序退出

需积分: 9 0 下载量 162 浏览量 更新于2024-07-24 收藏 241KB PDF 举报
"这篇文章主要介绍了在Visual C++编程中的一些实用技巧,包括获取应用程序实例句柄、主窗口指针、其他程序图标以及如何结束应用程序和控制Windows重新引导。" 在Visual C++编程中,掌握一些核心技能对于提高开发效率至关重要。以下是文章中提到的四个关键知识点: 1. 获取应用程序实例句柄:在Visual C++中,每个应用程序都有一个唯一的实例句柄,用于标识应用程序的运行实例。这个句柄通常保存在`CWinApp`类的`m_hInstance`成员变量中。开发者可以通过`AfxGetInstanceHandle()`函数来获取这个句柄。例如: ```cpp HANDLE hInstance = AfxGetInstanceHandle(); ``` 这在需要对当前运行实例进行操作时非常有用,比如加载资源或者与其他实例通信。 2. 获得应用程序主窗口的指针:在MFC(Microsoft Foundation Classes)框架中,应用程序的主窗口是一个`CWnd`派生类的对象,其指针存储在`CWinThread::m_pMainWnd`中。你可以使用`AfxGetMainWnd()`全局函数来获取这个指针,进而对主窗口进行操作,如最大化窗口: ```cpp CWnd* pMainWnd = AfxGetMainWnd(); pMainWnd->ShowWindow(SW_SHOWMAXIMIZED); ``` 3. 获取其他程序的图标:有两种方法可以获取其他程序的图标。一种是使用SDK函数`SHGetFileInfo`,它能提供包括图标在内的文件信息;另一种是通过`ExtractIcon`函数直接提取图标资源。以下分别是两个示例: - 使用`SHGetFileInfo`: ```cpp SHFILEINFO stFileInfo; if (::SHGetFileInfo(L"c:\\pwin95\\notepad.exe", 0, &stFileInfo, sizeof(stFileInfo), SHGFI_ICON)) { pDC->DrawIcon(10, 10, stFileInfo.hIcon); } ``` - 使用`ExtractIcon`: ```cpp HICON hIcon = ::ExtractIcon(AfxGetInstanceHandle(), L"Notepad.exe", 0); if (hIcon && hIcon != (HICON)-1) { pDC->DrawIcon(10, 10, hIcon); } ``` 注意,获取程序图标时应确保路径正确,特别是在不同版本的Windows系统下,可能需要通过注册表或者其他方式获取程序的准确位置。 4. 结束应用程序和控制Windows重新引导:在编程中,通常通过向主窗口发送`WM_CLOSE`消息来结束应用程序。`CWnd`类提供了`OnClose`成员函数来处理这个消息。例如: ```cpp PostMessage(WM_CLOSE); ``` 至于控制Windows重新引导,这通常涉及到操作系统级别的操作,不建议在普通应用程序中直接进行。但在某些特定场景,如系统维护或更新后需要重启,可以通过调用`ExitWindowsEx`函数来实现,传入相应的标志来指定行为。 这些技巧在Visual C++开发过程中非常实用,了解并熟练运用它们可以提升开发效率和代码质量。在实际项目中,开发者还需要根据具体需求和环境灵活应用,并考虑程序的健壮性和兼容性。