首页 > 编程语言 >窗口程序框架

窗口程序框架

时间:2024-05-04 15:46:03浏览次数:25  
标签:wc 框架 句柄 程序 return hwnd 窗口 NULL

#include <windows.h>

//回调函数,消息处理函数 
LRESULT CALLBACK WndProc(HWND hwnd, //窗口句柄 
                        UINT Message,//消息 
                         WPARAM wParam,//消息参数 
                         LPARAM lParam) {//消息参数 
    switch(Message) {
        
        /* Upon destruction, tell the main thread to stop */
        case WM_DESTROY: {//当用户关闭窗口,窗口销毁,程序需结束,发退出消息,以退出消息循环 
            PostQuitMessage(0);
            break;
        }
        
        /* All other messages (a lot of them) are processed using default procedures */
        default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}

//1.创建WinMain()主函数
//WINAPI 函数修饰符 被称为栈的数据结构 用来支持参数传递 
int WINAPI WinMain(HINSTANCE hInstance,//该程序当前运行实例的句柄 
                    HINSTANCE hPrevInstance,//当前实例的前一个实例的句柄 
                    LPSTR lpCmdLine,//是一个以空终止的字符串,指定传递给应用程序的命令行参数 
                     int nCmdShow) {//指定程序的窗口应该如何显示 
    //设计窗口 
    WNDCLASSEX wc; /* 窗框内属性 知识点1*/
    HWND hwnd; /* 句柄,或指向窗口的指针 */
    MSG msg; /* 所有消息的临时位置*/

    
    memset(&wc,0,sizeof(wc));//初始化结构体 
    wc.cbSize         = sizeof(WNDCLASSEX);//赋值结构体大小 
    wc.lpfnWndProc     = WndProc; /* 窗口处理函数的指针,用来发送信息,回调函数 */
    wc.hInstance     = hInstance;//实例句柄 
    wc.hCursor         = LoadCursor(NULL, IDC_ARROW);//窗口类的鼠标样式,为鼠标样式资源的句柄 
    
    /* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//窗口类的背景刷,为背景刷句柄 
    wc.lpszClassName = "WindowClass";//指向窗口类的指针 
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */
    wc.hIconSm         = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */
    //    3、注册窗口 
    if(!RegisterClassEx(&wc)) {
        MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
    //4.创建窗口
    //创建成功后返回值为窗口句柄类型 
    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,//窗口的扩展风格 知识点2 
        "WindowClass",//指定窗口类的名称,设计窗口类为laszClassName成员指定的名称 
        "第一个窗口",//指定窗口类的名字。窗口样式指定了标题栏,窗口名字将显示在标题栏上 
        WS_VISIBLE|WS_OVERLAPPEDWINDOW,//窗口的及基本风格 知识点2 
        CW_USEDEFAULT, /* x */
        CW_USEDEFAULT, /* y */
        640, /* 宽 */
        480, /* 高 */
        NULL,//窗口的父窗口句柄 
        NULL,//窗口的菜单句柄 
        hInstance,//应用程序实例句柄 
        NULL);//窗口创建时附加参数 
    //5.显示窗口 
    if(hwnd == NULL) {
        MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }

    /*
        This is the heart of our program where all input is processed and 
        sent to WndProc. Note that GetMessage blocks code flow until it receives something, so
        this loop will not produce unreasonably high CPU usage
    */
    while(GetMessage(&msg, NULL, 0, 0) > 0) { /*如果没有接受到错误信息,执行下面函数语句 */
        TranslateMessage(&msg); /* 消息转化  */
        DispatchMessage(&msg); /* 消息派遣,把TranslateMessage转化的消息发送到窗口的消息处理的函数 */
        //此函数在窗口注册时已经指定 
    }
    return msg.wParam;//指定应用程序退出 
}

 

标签:wc,框架,句柄,程序,return,hwnd,窗口,NULL
From: https://www.cnblogs.com/hanxuyao/p/18172378

相关文章

  • 窗口程序的框架
    #include<windows.h>//步骤//1.创建WinMain()主函数//2.设计窗口//3.注册窗口//4.创建窗口//5.显示窗口//回调函数,消息处理函数LRESULTCALLBACKWndProc(HWNDhwnd,//窗口句柄 UINTMessage,//消息 WPARAMwParam,//消息参数 LPARAMlParam)......
  • 窗口程序框架示例代码
    #include<windows.h>//创建窗口程序的步骤://1.创建WinMain()主函数//2.设计窗口//3.注册窗口//4.创建窗口//5.显示窗口//回调函数,消息处理函数LRESULTCALLBACKWndProc(HWNDhwnd,//窗口句柄 UINTMessage,//消息 WPARAMwParam,//消息参数 ......
  • 窗口程序框架
    #include<windows.h>//创建窗口程序的步骤://1.创建winMain()主函数//2.设计窗口//3.注册窗口//4.创建窗口//5.显示窗口LRESULTCALLBACKWndProc(HWNDhwnd,UINTMessage,//消息WPARAMwParam,//消息参数LPARAMlParam){//消息参数switch(Message){......
  • 浙大版C语言程序设计习题11-17
    点击查看代码typedefstructNODE{intdata;structNODE*next;}NODE,*Linkedlist;//初始化头节点voidInit(Linkedlist&L){L=(NODE*)malloc(sizeof(NODE));L->next=NULL;}//尾插法创建链表LinkedlistCreateFromRear(LinkedlistL){NODE*rear=L;for......
  • 开发Android应用程序,在Android10的系统上提示网络出错?
    今天维护以前开发的一个Android客户端程序,发版后,有用户说自己手机安装,无法登录,首屏打开后(有网络通过接口加载服务器数据并显示的行为),提示网络出错。但是我在我自己手上的PDA设备(Android4.4)正常,然后又去找了一台Android设备,是Android8.0的,也正常。初步怀疑是高版本没兼容的问题......
  • 拂衣天气(微天气 )程序发布记录
    前言服务端部署:由于并没有建立全链路的自动化部署,目前还需要到云服务器上进行环境制作(数据库,Nginx),并拉取后端服务进行部署小程序发布:需要先完成服务端部署,保证应用正常可用服务端部署数据库安装与数据初始化最开始的时候,我是直接将在操作系统上面安装数据库,后面发现迁移的......
  • 网友开放的开源项目:网页版的A*算法可视化演示程序
    相关项目:https://xueqiaoxu.me/#projects项目介绍:AJavaScriptpath-findinglibraryforgridbasedgames.Italsocomesalongwithaninteractivevisualizationofnumerousstrategies.项目地址:https://github.com/qiao/PathFinding.js演示地址:https://qia......
  • 易优CMS安装出现程序和数据库版本不一致情况的解决方法
    易优cms建站系统出现无法安装,数据库文件版本号(V1.5.4)与CMS源码版本号(V1.5.6)不一致怎么办?这样的情况是因为程序在安装的时候是低版本,安装过通过后台升级到了最新版本。然后再进行数据库和程序的备份,就会导致程序和数据库版本不一致的情况。接下来我们给大家说下怎么来解决这个......
  • AI猜数字(窗口版)
    #include<bits/stdc++.h>#include<windows.h>usingnamespacestd;intmain(){intmaxx=10,minn=0,i=0;stringt;cout<<"请想一个数字"<<endl;if(MessageBox(NULL,"想好了吗?","提示",MB_YESNO)==I......
  • 弹出窗口
    #include<bits/stdc++.h>#include<windows.h>usingnamespacestd;intmain(){ MessageBox(NULL,"你好,这是一个提示信息框","信息框",MB_OK); MessageBox(NULL,"你好,这是一个提示信息框","信息框",MB_ABORTRETRYIGNORE); MessageBox(NULL,&q......