Windows API 编程之创建一个windows窗口

来源:互联网 发布:电视的mac什么意思 编辑:程序博客网 时间:2024/06/05 03:17

直接上代码。

/************************************************************************************** *  问题:使用windows API函数创建一个windows窗口 *  作者:李文顺 *  步骤: *      1、注册窗口类 (RegisterClassEx) *      2、创建窗口      (CreateWindowsEx) *      3、在桌面显示窗口   (ShowWindows) *      4、更新窗口客户区   (UpdataWindows) *      5、进入无限循环的消息获取和处理的循环。 *          GetMessage ,获取消息 *          TranslateMessage ,转换键盘消息      *          DispatchMessage ,将消息发送到相应的窗口函数 **************************************************************************************/ *      修改:修改一些注释,更准确。 *      时间:20161229 **************************************************************************************/#include <windows.h>//函数申明LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);//全局变量char titleName[]="你随意"; //窗口标题//图形界面程序的入口int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){    //定义窗口类(扩展)    WNDCLASSEX wcex;        //设置窗口的属性    wcex.cbSize         = sizeof(WNDCLASSEX);       wcex.style          = CS_HREDRAW | CS_VREDRAW;  //从这个窗口派生出的窗口具有的风格    wcex.lpfnWndProc    = (WNDPROC)WndProc;         //窗口消息处理函数指针    wcex.cbClsExtra     = 0;    wcex.cbWndExtra     = 0;    wcex.hInstance      = hInstance;    wcex.hIcon          = NULL;         //窗口最小化图标    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);                  wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);    wcex.lpszMenuName   = NULL;    wcex.lpszClassName  = titleName;    //该窗口类的名称    wcex.hIconSm        = NULL;         //左上角图标    //注册窗口    ::RegisterClassEx(&wcex);       HWND hWnd;    //创建窗口    hWnd = ::CreateWindow(titleName, titleName, WS_OVERLAPPEDWINDOW,        CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);    if (!hWnd)return FALSE; //创建窗口失败,返回    //显示窗口    ::ShowWindow(hWnd, nCmdShow);    //刷新窗口客户区    ::UpdateWindow(hWnd);    //循环获取\处理消息    MSG msg;         while(::GetMessage(&msg,0,0,0))         {             ::TranslateMessage(&msg);   //转换键盘消息             ::DispatchMessage(&msg);    //将消息发送到相应的窗口函数    }     return (int)msg.wParam; }//窗口消息处理函数LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){    HDC hDC;    RECT rect;    PAINTSTRUCT ps;    switch(message)    {    case WM_PAINT:        hDC = ::BeginPaint(hWnd,&ps);   //使无效的客户区变得有效,并取得环境设备        //自定义        {            ::GetClientRect(hWnd,&rect);    //获取窗口客户区的大小            ::DrawText(hDC,TEXT("HELLO WORLD"),-1,&rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);   //在指定的矩形里写入格式化的正文        }        ::EndPaint(hWnd,&ps);   //释放环境变量句柄,和::BeginPaint 配套使用           break;     case WM_DESTROY:        ::PostQuitMessage(0);   //该函数向消息队列中插入一条 WM_QUIT 消息,由 GetMessage 函数捕获返回 0 而退出程序        break;    }    return ::DefWindowProc(hWnd,message,wParam,lParam);}
0 0