"这篇文档是关于VC6.0使用和调试过程中常见的问题的总结,包含了多年的经验积累。主要涉及如何获取应用程序主窗口的指针、确定应用路径、获取其他程序的图标以及获得不同目录信息的方法。"
在使用Microsoft Visual C++ 6.0 (VC6.0)进行开发时,可能会遇到各种问题,以下是一些关键知识点:
1. **获取应用程序主窗口的指针**:
- 在MFC框架中,应用程序主窗口的指针通常保存在`CWinThread::m_pMainWnd`成员变量中。可以使用全局函数`AfxGetMainWnd()`来获取这个指针。例如,如果你想要最大化主窗口,你可以这样操作:
```cpp
AfxGetMainWnd()->ShowWindow(SW_SHOWMAXIMIZED);
```
2. **确定应用程序的路径**:
- 要获取当前运行应用程序的完整路径,可以使用Windows API函数`GetModuleFileName()`,将第二个参数设为NULL,表示获取当前进程的模块路径。然后可以通过字符串处理函数去除文件名,只保留路径部分。
3. **获取其他程序的图标**:
- 方法一:利用SDK函数`SHGetFileInfo()`,它可以获取文件的相关信息,包括图标。示例代码展示了如何在程序中显示记事本的图标。
```cpp
SHFILEINFO stFileInfo;
::SHGetFileInfo(_T("c:\\win95\\notepad.exe"), 0, &stFileInfo, sizeof(stFileInfo), SHGFI_ICON);
CDC* pDC = // 获取设备上下文
pDC->DrawIcon(10, 10, stFileInfo.hIcon);
```
- 方法二:使用`ExtractIcon()`函数,同样可以提取图标资源。示例代码展示了如何获取并绘制记事本的图标。
```cpp
HICON hIcon = ::ExtractIcon(AfxGetInstanceHandle(), _T("Notepad.exe"), 0);
if (hIcon && hIcon != (HICON)-1)
pDC->DrawIcon(10, 10, hIcon);
```
- 注意,正确获取程序路径可能需要根据不同的系统环境和需求进行调整,比如在Windows 95下找寻WinPen应用,可能需要访问注册表来获取路径。
4. **获得各种目录信息**:
- Windows目录:使用`GetWindowsDirectory()`函数,它会将Windows系统的根目录路径复制到指定的缓冲区。
- Windows下的System目录:可以直接将"System32"添加到Windows目录后面,或者使用`GetSystemDirectory()`函数获取。
- 其他系统目录,如用户配置目录、临时文件目录等,可以使用相应的API函数,如`GetTempPath()`、`GetEnvironmentVariable()`来获取。
这些知识点是VC6.0开发者在编写和调试应用程序时经常会用到的技巧,掌握它们能帮助提升开发效率和解决实际问题。