1、在CWnd::PreCreateWindow中,可通过cs修改窗口的初始化参数,如风格,大小,位置等。具体参看CREATESTRUCT结构。
2、在CMainFrame中调用其GetActiveView获取其对应的view类指针时,必须要做强制类型转换。因为GetActiveView获取的是CVIEW类的指针。
在MDI程序中,main frame 窗口(CMDIFrameWnd )没有对应的view,但每一个独立的child window(CMDIChildWnd )都有一个或多个与此关联的view。
CView* GetActiveView( ) const;
3、设置窗口始终置顶
SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
4、解决重绘窗口时闪烁的问题
SetWindowLong(this->m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_CLIPCHILDREN );
WS_CLIPCHILDREN风格: Excludes the area occupied by child windows when you draw within the parent window。
在重绘父窗口时,不刷新被子窗口占据的区域。
5、::PostMessage中HWND_BROADCAST标志的注意点
HWND_BROADCAST标志设置后,PostMessage会向所有的顶层窗口发送指定的消息 。对于这条消息,需要经过以下步骤处理:
1、自定义一个消息:UINT WM_COUNTUPDATE = WM_USER+1;
2、使用RegisterWindowMessage将此消息注册为系统唯一消息:WM_COUNTUPDATE = RegisterWindowMessage(_T("WM_COUNTUPDATE"));
3、使用::PostMessage发送消息
4、如是MFC程序,还需在消息映射表格内添加相应记录:
afx_msg LRESULT OnCountUpdate(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CNeicunDlg, CDialog)
ON_REGISTERED_MESSAGE (WM_COUNTUPDATE,OnCountUpdate)
END_MESSAGE_MAP()
LRESULT CNeicunDlg::OnCountUpdate(WPARAM wParam, LPARAM lParam)
{
return 0;
}
6、初始化控制台程序,如何隐藏CMD窗口
控制台程序的入口点一般为main,可将链接选项中添加/subsystem:"windows" /ENTRY:"mainCRTStartup"选项,则可隐藏cmd窗口。适用于使用openGL编写窗口程序的情况。
7、MFC中防止GDI泄露
在程序中,如使用GetDC获取了dc指针,在使用完后,一定要使用ReleaseDC释放该dc,否则会造成GDI泄露。