MFC的一些零碎

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泄露。

你可能感兴趣的:(windows,cmd,user,mfc)