如何通过代码获得应用程序主窗口的.doc
文本预览下载声明
1 如何通过代码获得应用程序主窗口的 指针?
主窗口的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现。
AfxGetMainWnd - ShowWindow SW_SHOWMAXMIZED
//使程序最大化.
2 确定应用程序的路径
Use GetModuleFileName 获得应用程序的路径,然后去掉可执行文件名。
Example:
TCHAR
exeFullPath[MAX_PATH] // MAX_PATH在API中定义了吧,好象是
128
GetModuleFileName NULL,exeFullPath,MAX_PATH
3 如何在程序中获得其他程序的 图标?
两种方法:
1 SDK函数 SHGetFileInfo 或使用 ExtractIcon获得图标资源的 handle,
2 SDK函数 SHGetFileInfo 获得有关文件的很多信息,如大小图标,属性, 类型等.
Example 1 :
在程序窗口左上角显示 NotePad图标.
void CSampleView:
OnDraw CDC * pDC if :: SHGetFileInfo _T c:\\pwin95\\notepad.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目录: Use GetWindowsDirectory
Windows下的system目录: Use GetSystemDirectory
temp目录: Use GetTempPath
当前目录: Use GetCurrentDirectory
请注意前两个函数的第一个参数为目录变量名,后一个为缓冲区后两个相反.
5 如何自定义消息
1 手工定义消息,可以这么写
#define WM_MY_MESSAGE WM_USER+100 ,
MS 推荐的至少是 WM_USER+100
2 写消息处理函数,用
WPARAM,LPARAM返回LRESULT.
LRESULT CMainFrame::OnMyMessage WPARAM wparam,LPARAM lParam temp目录: Use GetTempPath
//加入你的处理函数 irectory 6 如何改变窗口的图标?
向窗口发送 WM_SECTION消息。
Example:
HICON hIcon AfxGetApp - LoadIcon IDI_ICON
ASSERT hIcon
AfxGetMainWnd - SendMessage WM_SECTION,TRUE, LPARAM hIcon
7 如何改变窗口的缺省风格?
重载 CWnd:: PreCreateWindow 并修改CREATESTRUCT结构来指定窗口风格和其他创建信息.
Example: Delete Max Button and Set Original
Windows Position and Size
BOOL CMainFrame:: PreCreateWindow
CREATESTRUCT cs cs.style ~WS_MAXINIZEMOX
cs.x cs.y 0
cs.cx GetSystemMetrics SM_CXSCREEN/2
cs.cy GetSystemMetrics SM_CYSCREEN/2
return CMDIFramewnd ::PreCreateWindow cs 8 如何将窗口居中显示?
Call Function CWnd::
Center Windows
Example 1 :
Center Window //Relative to its parent
// Relative
to Screen
Example 2
显示全部