六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 30|回复: 0

噢,我的第一个基于SDK的窗口

[复制链接]

升级  22.33%

83

主题

83

主题

83

主题

举人

Rank: 3Rank: 3

积分
267
 楼主| 发表于 2013-1-28 13:21:13 | 显示全部楼层 |阅读模式
        昨天看WinMain函数的修饰符WINAPI,看得眩晕,今天专注于WinMain函数的过程也不轻松。为了弄明白一个窗口从创建到销毁的过程,也是大费周章。不过还好,能够看到自己建造的第一个最原始的窗口,总算有了点满足感。
        创建一个窗口涉及了几个概念:HWND、WNDCLASS(WNDCLASSEX)、RegisterClass(RegisterClassEx)和CreateWindow(CreateWindowEx)。HWND就是Window Handle,它的实质就是一个指针,指向被创建的窗口对象;WNDCLASS(WNDCLASSEX)本身是一个结构体,代表着窗口对象,里面包含了与窗口对象紧密相关的属性;RegisterClass(RegisterClassEx)是用以注册窗口对象的函数;CreateWindow(CreateWindowEx)则是用以创建窗口对象,并且返回一个HWND。其中括号的内容是一一对应,就是说如果定义了WNCLASSEX,就必须用RegisterClassEx去注册,用CreateWindowEx去创建WNDCLASSEX定义的窗口对象。
       创建一个看得见摸得着的窗口,主要有以下四步:
       1、利用WNDCLASS(WNDCLASSEX)定义窗口对象;
       2、调用RegisterClass(RegisterClassEx)函数注册窗口对象;
       3、调用CreateWindow(CreateWindowEx)方法创建已经定义并且注册的窗口对象;
       4、定义负责处理消息队列的Window Procedure。
       以下为一个很简单的例子:
<div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; width: 98%; padding-top: 4px;">#include <windows.h>   
LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam, LPARAM lparam);

int WINAPI WinMain(HINSTANCE hinstance,
     HINSTANCE hprevinstance,LPSTR lpcmdline,
int ncmdshow)
{

 WNDCLASSEX winclass 
= {0}
    HWND hwnd;  
    MSG  msg;   

winclass.cbSize 
= sizeof(WNDCLASSEX);
winclass.style 
= CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc 
= WindowProc;
winclass.hInstance 
= hinstance;
winclass.hbrBackground 
= (HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszClassName 
= "WinInit";

RegisterClassEx(
&winclass);

hwnd 
= CreateWindowEx(NULL, "WinInit""First Window" 
       WS_OVERLAPPEDWINDOW | WS_VISIBLE, 
00
       200200, NULL, NULL, hinstance, NULL);
for(;;)
 
{
 
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    

       
if (msg.message == WM_QUIT)
           
break;   
    TranslateMessage(
&msg);  
    DispatchMessage(
&msg);
    }
 
 }
 
return(msg.wParam);
}
 

LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam, LPARAM lparam)
{  
 
return DefWindowProc(hwnd, msg, wparam, lparam);
}
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表