码迷,mamicode.com
首页 > 其他好文 > 详细

创建简单的窗口程序

时间:2015-11-03 02:06:09      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

#include <windows.h>

/*窗口函数的函数原型*/
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);
}


创建简单的窗口程序

标签:

原文地址:http://my.oschina.net/u/241930/blog/525083

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!