首页 > 其他分享 >MFC-消息的处理WindowProc

MFC-消息的处理WindowProc

时间:2023-01-31 14:12:58浏览次数:37  
标签:MFC 处理 WM WindowProc PAINT 消息 cs CMyFrameWnd

 

#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,处理,WM,WindowProc,PAINT,消息,cs,CMyFrameWnd
From: https://www.cnblogs.com/liming19680104/p/17078776.html

相关文章

  • Python3网络爬虫教程5——ProxyHandler处理(代理服务器和代理IP)
    上接:Python3网络爬虫教程4——UserAgent的使用(用户伪装)(附常用的UserAgent值清单[3.ProxyHandler处理(代理服务器)使用代理IP,是爬虫的常用手段服务器有反爬虫手段,使用代......
  • jdbc中的批处理
    本文主要讲述,面对多个sql语句【增,删,改】的执行,如何加快执行速度?传统方法:publicclassjdbcBat_{//同时处理多条数据【原始方法】@Testpublicvoidtes......
  • Python Pillow(PIL) 图像处理(分离、合并、裁剪、几何变换)
    Pillow(PIL)是Python平台事实上的图像处理标准库,支持多种格式,并提供强大的图形与图像处理功能。PIL模块全称为PythonImagingLibrary,是Python中一个免费的图像处理模块......
  • jdbc中事务的处理
    /***模拟账户:Tom账户加钱+100,marry账户减钱-100*开启事务*/publicclassjdbcTransaction{publicstaticvoidmain(String[]args){//不使用......
  • .net core 下使用 Kafka 生产者批量发送给消息处理,使用事务(四)
    生产者批量发送消息,使用事务,要么全部失败要么全部成功重要说明事物id必须要设置producerConfig.TransactionalId=Guid.NewGuid().ToString();//必须设置事物id 1......
  • ActiveMQ高并发处理方案
    高并发发送消息异常解决方法:现象:使用10个线程每100ms发送一条消息,大约3000多条后,出现异常,所有线程停            止: javax.jms.JMSException:Couldnotco......
  • flask_migrate---处理 sqlalchemy 数据迁移的工具
    1.什么是flask_migrateflask_migrate是专门用来做sqlalchemy数据迁移的工具,当据模型发生变化的时可将修改后的模型重新映射到数据库中,这意味着数据库也将被修改。本文介......
  • bash字符串处理
    一、计算字符串长度法一${#string} 法二exprlength“${string}”变量字符串中包含空格则要带双引号  二、获取子串某字符在字符串中索引位置expr......
  • EchartsLabel显示的细节处理
    0.缘起照理来说,春节过后的我现在应该还在快乐地摸鱼划水,但小测试猛地发来测试文档和示例,我对了一波之后对其中有个Echarts的label显示超过20截断有了些许冷汗泠泠的感觉......
  • 多个线程下处理事务
     springboot项目都是声明式事务,在多个线程事务处理时,需要我们使用手动事务管理器@ResourceprivatePlatformTransactionManagerplatformTransactionManager;......