MFC-消息的处理函数WindowProc

 

复制代码
#include <afxwin.h>  

class CMyFrameWnd :public CFrameWnd 
{
public:
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);//修改窗口属性

    virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);//重写消息处理函数
    //参数1:是系统发过来的消息


};

LRESULT CMyFrameWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_CREATE:   //窗口生成消息
        AfxMessageBox("收到WM_CREATE消息");
        break;
    case WM_PAINT: //要求一个窗口重画自己
        //WM_PAINT消息的产生:当显示区域(客户区)存在无效区域时,系统会产生一个WM_PAINT消息,通知视窗处理程序重绘显示区域
        //比如:第一次创建窗口,改变了窗口的大小,最大化,最小化等等(其实这些事件发生时会调用UpdateWindow函数,由该函数发送WM_PAINT消息),它会向用户程序发送一个WM_PAINT消息
        //窗口过程收到WM_PAINT消息后,并不代表整个客户区都需要被刷新,有可能客户区被覆盖的区域只有一小块,这个区域叫做“无效区域”,程序只需要更新这个区域。与WM_TIMER消息类似,
        //WM_PAINT消息也是一个低级别的消息,虽然它不会像WM_TIMER消息一样被丢弃,但Windows总是在消息循环空的时候才把WM_PAINT放入其中

        /*
        //win32方式
        PAINTSTRUCT ps = { 0 };
        HDC hDC = ::BeginPaint(m_hWnd,&ps);
        ::TextOut(hDC, 50, 50, "WM_PAINT消息", 12);
        ::EndPaint(m_hWnd, &ps);
        */

        //MFC方式
        PAINTSTRUCT ps1 = { 0 };
        CDC* pDC = BeginPaint(&ps1);
        pDC->TextOutA(150, 150, "WM_PAINT消息");
        EndPaint(&ps1);
        break;



    
    }

    return CFrameWnd::WindowProc(message, wParam, lParam);//不是我们关心的消息返回系统默认处理
}

BOOL CMyFrameWnd::PreCreateWindow(CREATESTRUCT& cs)
{
    
    cs.x = 50; 
    cs.y = 50; 
    cs.cx = 500;
    cs.cy = 300;

    return CFrameWnd::PreCreateWindow(cs);

}

class CMyWinApp :public CWinApp
{
public:
    virtual BOOL InitInstance(); 

};

CMyWinApp theAPP;  

BOOL CMyWinApp::InitInstance()

{
    CMyFrameWnd* pFrame = new CMyFrameWnd; 
    
    pFrame->Create(NULL, "MFCWnd");  
    
    m_pMainWnd = pFrame;
    
    
    m_pMainWnd->ShowWindow(SW_SHOW);   
    m_pMainWnd->UpdateWindow();  

    

    return TRUE;
}
复制代码

 

在MFC中添加处理函数WindowProc

右击窗口->类向导->虚函数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   天子骄龙  阅读(695)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-01-31 python-opencv-图像边缘检测Sobel算子
点击右上角即可分享
微信分享提示

目录导航