博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
创建简单的窗口程序
阅读量:6328 次
发布时间:2019-06-22

本文共 5574 字,大约阅读时间需要 18 分钟。

hot3.png

#include 
/*窗口函数的函数原型*/LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){    char szClassName[] = "MainWClass";    WNDCLASSEX wndclass;        /*用描述主窗口的参数填充WNDCLASSEX结构*/    wndclass.cbSize = sizeof(wndclass);             /*结构的大小*/    wndclass.style = CS_HREDRAW | CS_VREDRAW;       /*指定如果大小改变就重画*/    wndclass.lpfnWndProc = MainWndProc;             /*窗口函数指针*/    wndclass.cbClsExtra = 0;                        /*没有额外的类内存*/    wndclass.cbWndExtra = 0;                        /*没有额外的窗口内存*/    wndclass.hInstance = hInstance;                 /*实例句柄*/    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);/*使用预定义图标*/    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);  /*使用预定义光标*/    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); /*使用白色背景画刷*/    wndclass.lpszMenuName = NULL;                   /*不指定菜单*/    wndclass.lpszClassName = szClassName;           /*窗口类的名称*/    wndclass.hIconSm = NULL;                        /*没有类的小图标*/        /*注册这个窗口*/    RegisterClassEx(&wndclass);        /*创建主窗口*/    HWND hwnd = CreateWindowEx(        0,                         /*dwExStyle, 扩展样式*/        szClassName,               /*lpClassName, 类名*/        "My first Window!",        /*lpWindowName, 标题*/        WS_OVERLAPPEDWINDOW,       /*dwStyle, 窗口风格*/        CW_USEDEFAULT,             /*X, 初始X坐标*/        CW_USEDEFAULT,             /*Y, 初始Y坐标*/        CW_USEDEFAULT,             /*nWidth,宽度*/        CW_USEDEFAULT,             /*nHeight, 高度*/        NULL,                      /*hWndParent, 父窗口句柄*/        NULL,                      /*hMenu, 菜单句柄*/        hInstance,                 /*hInstance, 程序实例句柄*/        NULL);                       /*lpParam, 用户数据*/        if(hwnd == NULL)    {        MessageBox(NULL, "Error build the Window!", "Error", MB_OK);        return -1;    }        /*显示窗口,刷新窗口客户区*/    ShowWindow(hwnd, nCmdShow);    UpdateWindow(hwnd);        /*从消息队列中取出消息,交给窗户函数处理,直接到GetMessage返回FALSE,结束消息循环*/    MSG msg;    while(GetMessage(&msg, NULL, 0, 0))    {        /*转化键盘消息*/        TranslateMessage(&msg);        /*将消息发送到相应的窗口函数*/        DispatchMessage(&msg);    }        /*当GetMessage返回FALSE时程序结束*/    return msg.wParam;}LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){    char szText[] = "最简单的窗口程序!";    switch(message)    {        case WM_PAINT:  /*窗口客户区需要重画*/        {            HDC hdc;            PAINTSTRUCT ps;                        /*使无效的客户区变得有效,并取得设备环境句柄*/            hdc = BeginPaint(hwnd, &ps);            /*显示文字*/            TextOut(hdc, 10, 10, szText, strlen(szText));            EndPaint(hwnd, &ps);            return 0;        }        case WM_DESTROY: /*正在销毁窗口*/            /*向消息队列投递一个WM_QUIT消息,促使GetMessage函数返回0,结束消息循环*/            PostQuitMessage(0);            return 0;    }    /*将我们不处理的消息交给系统做默认处理*/    return DefWindowProc(hwnd, message, wParam, lParam);}

另一个类似的例子:

#include 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);/* The 'main' function of Win32 GUI programs: this is where execution starts */int WINAPI WinMain(    HINSTANCE hInstance,    HINSTANCE hPrevInstance,    LPSTR lpCmdLine,    int nCmdShow){     static TCHAR szClassName[] = TEXT("HelloWin"); /*窗口类名*/    HWND hwnd;  /*窗口句柄*/    MSG msg;    /*消息*/    WNDCLASS wndclass;   /*窗口类*/         /***********第一步:注册窗口类*************/    /*为窗口类各个字段赋值*/    wndclass.style = CS_HREDRAW | CS_VREDRAW;  /*窗口风格*/    wndclass.lpfnWndProc  = WndProc; /*窗口过程*/    wndclass.cbClsExtra   = 0;    wndclass.cbWndExtra   = 0;    wndclass.hInstance    = hInstance;  /*当前窗口句柄*/    wndclass.hIcon        = LoadIcon(NULL, IDI_APPLICATION);  /*窗口图标*/    wndclass.hCursor      = LoadCursor(NULL, IDC_ARROW);/*鼠标样式*/    wndclass.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);/*窗口背景画刷*/    wndclass.lpszMenuName = NULL;  /*窗口菜单*/    wndclass.lpszClassName= szClassName; /*窗口类名*/            /*注册窗口*/    RegisterClass(&wndclass);        /*************第二步:创建窗口(并让窗口显示出来)***************/    hwnd = CreateWindow(        szClassName,  /*窗口名字*/        TEXT("Welcome"), /*窗口标题*/        WS_OVERLAPPEDWINDOW,  /*窗口风格*/        CW_USEDEFAULT,  /*初始化x轴的位置*/        CW_USEDEFAULT,  /*初始化y轴的位置*/        640,  /*窗口宽度*/        480,  /*窗口高度*/        NULL, /*父窗口句柄*/        NULL, /*窗口菜单句柄*/        hInstance, /*当前窗口句柄*/        NULL    /*不使用该值*/        );            if(hwnd == NULL)    {        MessageBox(NULL, "创建窗口出错!", "Error", MB_OK);        return -1;    }            /*显示窗口*/    ShowWindow(hwnd, nCmdShow);    /*更新(绘制)窗口*/    UpdateWindow(hwnd);            /*************第三步:消息循环*************/    while(GetMessage(&msg, NULL, 0, 0))    {        TranslateMessage(&msg);  /*翻译消息*/        DispatchMessage(&msg);   /*分派消息*/    }    return msg.wParam; /*当GetMessage程序返回FALSE是程序结束*/}/*************第四步:窗口过程*****************/LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){    HDC hdc;    PAINTSTRUCT ps;    RECT rect;        switch(message)    {        case WM_PAINT:            hdc = BeginPaint(hwnd, &ps);            GetClientRect(hwnd, &rect);            DrawText(                hdc,                TEXT("你好,欢迎来到地球。"),                -1,                &rect,                DT_SINGLELINE | DT_CENTER | DT_VCENTER            );            EndPaint(hwnd, &ps);            return 0;                    /*窗口销毁消息*/        case WM_DESTROY:            PostQuitMessage(0);            return 0;    }    return DefWindowProc(hwnd, message, wParam, lParam);}

转载于:https://my.oschina.net/u/241930/blog/525083

你可能感兴趣的文章
最佳6款用于移动网站开发的 jQuery 图片滑块插件
查看>>
C++ String
查看>>
获取系统托盘图标的坐标及文本
查看>>
log4j Test
查看>>
HDU 1255 覆盖的面积(矩形面积交)
查看>>
Combinations
查看>>
SQL数据库无法附加,提示 MDF" 已压缩,但未驻留在只读数据库或文件组中。必须将此文件解压缩。...
查看>>
第二十一章流 3用cin输入
查看>>
在workflow中,无法为实例 ID“...”传递接口类型“...”上的事件“...” 问题的解决方法。...
查看>>
获取SQL数据库中的数据库名、所有表名、所有字段名、列描述
查看>>
Orchard 视频资料
查看>>
简述:预处理、编译、汇编、链接
查看>>
调试网页PAIP HTML的调试与分析工具
查看>>
路径工程OpenCV依赖文件路径自动添加方法
查看>>
玩转SSRS第七篇---报表订阅
查看>>
WinCE API
查看>>
.NET 4.5.1 预览版新特性
查看>>
POJ 3280 Cheapest Palindrome(DP 回文变形)
查看>>
oracle修改内存使用和性能调节,SGA
查看>>
SQL语言基础
查看>>