c++ win窗口消息演示

这篇博客详细介绍了如何在C++中使用Win32 API进行窗口消息处理,包括WM_CREATE、WM_PAINT、WM_SIZE、WM_LBUTTONDOWN等常见消息的响应方法,同时展示了右键菜单、键盘和鼠标事件的处理,以及窗口关闭和最大化/最小化操作。此外,还提到了在窗口类风格中添加CS_DBLCLKS以处理双击事件的技巧。
摘要由CSDN通过智能技术生成

/*
=========================================================================
主要功能:c++ win窗口消息演示
        
         (c++、win32 api) 张国鹏, 2021
                                  
编辑工具:notepad++v7.8.2  
编译工具:tdm-gcc-5.1.0-3(32位)
编译指令:
        Notepad++快速运行代码:按F5,输入以下指令,即可编译并运行C++ WIN32程序:
        方式一:cmd /k cd /d "$(CURRENT_DIRECTORY)" & g++ -std=gnu++11 "$(FILE_NAME)" -o "$(NAME_PART)"  & "$(NAME_PART).exe
        方式二:cmd /k cd /d "$(CURRENT_DIRECTORY)" & g++ -std=gnu++11 "$(FILE_NAME)" -o "$(NAME_PART)"  -static-libgcc -lcomctl32 -lgdi32 -lcomdlg32 -lgdiplus -lwininet -lwinmm -lwinspool & "$(NAME_PART).exe

如果程序含有windows.h以外的库,则用方式二编译即可。
如果不需要CMD窗口出现,编译指令加上这句:-mwindows
编译指令加上这句:-std=gnu++11,即采用c++11编译    

注意事项:本书所载代码均为ANSI格式,切勿转为UTF-8格式,否则可能造成不可预料的结果!
=========================================================================
*/        
#include <windows.h>
#include <stdio.h>//printf
#include <string>
using namespace std;//注意一定要写这句

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    bool can_close=false;//程序退出前能否退出标志
    static int cxClient,cyClient;
    HDC hdc;
    PAINTSTRUCT ps ;    
    switch (message)
    {
        case WM_CREATE://    0x0001    应用程序创建一个窗口
        {
            printf("句柄:%d,窗口正在创建中.....!\n",hwnd);
            break;
        }

        case WM_PAINT://    0x000F    要求一个窗口重绘自己
        {
        
            EndPaint (hwnd, &ps) ;
            hdc=BeginPaint(hwnd,&ps);    //获取要重画的窗口的设备描述表句柄            
                //在这里画上你想画的内容 
                string temp;//引用#include <string>
                temp="哈哈,这是想要显示的内容!";
                TextOut(hdc,10,10,temp.c_str(),temp.size());
            EndPaint(hwnd,&ps);        //结束重画
            return 0;
        }
        case WM_CONTEXTMENU://右键菜单//cd
        {
                    //Win32创建弹出菜单
                        POINT point;
                        ::GetCursorPos(&point);//得到鼠标的当前位置
                        HMENU hMenuPopup = CreatePopupMenu () ;
                            HMENU hMenuPopup1 = CreatePopupMenu () ;
                            AppendMenu(hMenuPopup1, MF_STRING, 101, "MF_STRING");
                            AppendMenu(hMenuPopup1, MF_SEPARATOR, 0, NULL) ;
                            AppendMenu(hMenuPopup1, MF_CHECKED, 102, "MF_CHECKED");
                        
                        AppendMenu(hMenuPopup, MF_STRING, 1, "MF_STRING");
                        AppendMenu(hMenuPopup, MF_SEPARATOR, 0, NULL) ;
                        AppendMenu(hMenuPopup, MF_CHECKED, 2, "MF_CHECKED");
                        AppendMenu(hMenuPopup, MF_DISABLED, 3, "MF_DISABLED");
                        AppendMenu(hMenuPopup, MF_ENABLED, 4, "MF_ENABLED");
                        AppendMenu(hMenuPopup, MF_GRAYED, 5, "MF_GRAYED");
                        AppendMenu(hMenuPopup, MF_MENUBARBREAK, 6, "MF_MENUBARBREAK");
                        AppendMenu(hMenuPopup, MF_STRING, 7, "MF_STRING");
                        AppendMenu(hMenuPopup, MF_STRING, 8, "MF_STRING");
                        AppendMenu(hMenuPopup, MF_MENUBREAK, 9, "MF_MENUBREAK");
                        AppendMenu(hMenuPopup, MF_POPUP,(LONG)hMenuPopup1, "MF_POPUP");
                        

                        TrackPopupMenu (hMenuPopup, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL) ;
                        DestroyMenu (hMenuPopup1);
                        DestroyMenu (hMenuPopup);
                    return 0;
        }        
        case WM_SYSCOMMAND://    0x0112    选择窗口菜单项或选择最大化或最小化时,发送此消息给该窗口
        {
            switch(wParam)
            {
                case SC_MINIMIZE://  最小化窗口
                {
                    printf("句柄:%d,窗口已被最小化!\n",hwnd);
                    break;//交由系统处理该条消息
                    //return 0;//如果不想被最小化,则直接return 0; 告诉系统该条消息已被处理
                }
                case SC_MAXIMIZE://最大化窗口
                {
                    printf("句柄:%d,窗口已被最大化!\n",hwnd);
                    break;//交由系统处理该条消息
                    //return 0;//如果不想被最小化,则直接return 0; 告诉系统该条消息已被处理
                }                
            }
            break;
        }
        
        case WM_SIZE://窗口尺寸发生改变
        {
            c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值