Visual C++编程技巧:获取句柄,主窗口指针,图标与程序退出
需积分: 9 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++开发过程中非常实用,了解并熟练运用它们可以提升开发效率和代码质量。在实际项目中,开发者还需要根据具体需求和环境灵活应用,并考虑程序的健壮性和兼容性。
2018-04-08 上传
2022-06-17 上传
2009-02-21 上传
2007-04-13 上传
点击了解资源详情
点击了解资源详情
2023-03-31 上传
2024-11-19 上传
2024-11-19 上传
liucunming
- 粉丝: 0
- 资源: 25
最新资源
- 深入浅出:自定义 Grunt 任务的实践指南
- 网络物理突变工具的多点路径规划实现与分析
- multifeed: 实现多作者间的超核心共享与同步技术
- C++商品交易系统实习项目详细要求
- macOS系统Python模块whl包安装教程
- 掌握fullstackJS:构建React框架与快速开发应用
- React-Purify: 实现React组件纯净方法的工具介绍
- deck.js:构建现代HTML演示的JavaScript库
- nunn:现代C++17实现的机器学习库开源项目
- Python安装包 Acquisition-4.12-cp35-cp35m-win_amd64.whl.zip 使用说明
- Amaranthus-tuberculatus基因组分析脚本集
- Ubuntu 12.04下Realtek RTL8821AE驱动的向后移植指南
- 掌握Jest环境下的最新jsdom功能
- CAGI Toolkit:开源Asterisk PBX的AGI应用开发
- MyDropDemo: 体验QGraphicsView的拖放功能
- 远程FPGA平台上的Quartus II17.1 LCD色块闪烁现象解析