Lesson 01 Windows程序运行原理及程序编写(SDK)

温馨提示: 本内容还没有整理完毕

 操作系统是怎么样将感知到的事件传递给应用程序的?这是通过消息机制来实现的。操作系统将每个事件都包装成一个成为消息的结构体MSG来传递给应用程序。

    MSG的结构定义如下:

        typedef struct tagMSG{

        HWND hwnd;
        UINT message;
        WPARAM wParam;
        LPARAM lParam;
        DWORD time;
        POINT pt;
        }MSG;
    

HWND:窗口句柄,资源的标识。操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。按资源的类型,又可将句柄细分为图标句柄(HICON),光标句柄(HCURSOR),

窗口句柄(HWND),应用程序实例句柄(HINSTANCE)等等各种类型的句柄。操作系统给每一个窗口指定的一个唯一的标识号即窗口句柄。

UINT:无符号的整型。message:传递消息,用整数来传递消息

WM_KEYDOWN是一个整型数据,宏定义。

WPARAM:一个整型数据,只是关于这个消息的附加信息。(character code(TCHAR))

lParam:一个整型数据,只是关于这个消息的附加信息。

DWORD:WORD是一个16位的整数,DWORD即DOUBLE WORD,32位整数。消息被传递出去的时间。

POINT:指示了一个光标的位置,当消息被传递时光标的位置。

消息队列:操作系统会给每个程序都建立一个消息队列先进先出的缓冲区,

WinMain函数
Windows

int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPATR lpCmdLine, //指向字符串的一个长指针
int nCmdShow //指定程序的窗口是怎么的显示
);


窗口的创建:
创建一个完整的窗口需要经过下面四个操作步骤:
1:设计一个窗口类

typedef struct _WNDCLASS {
UINT style;// 窗口类型
WNDPROC lpfnWndProc;//窗口过程函数,指针
int cbClsExtra;//窗口扩展,默认设置为0
int cbWndExtra;//窗口实例扩展 ,通常设置为0
HINSTANCE hInstance;//实例句柄
HICON hIcon;//窗口的最小化图标(实质是一个句柄 )
HCURSOR hCursor;//窗口鼠标光标
HBRUSH hbrBackground;//窗口背景色
LPCTSTR lpszMenuName;//窗口菜单
LPCTSTR lpszClassName;// 窗口类名
} WNDCLASS, *LPWNDCLASS;

2:注册窗口类

RegisterClass(CONST WNDCLASS *lpWndClass);

3:创建窗口

HWND hwnd;
HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HANDLE hlnstance,
LPVOID lpParam //指针,在创建多文档,单文档的时候使用。
);


4:显示及更新窗口
ShowWindow(
HWND hwnd, //显示窗口的句柄
int nCmdShow //显示的状态
)

UpdateWindow(
HWND hwnd //显示窗口的句柄
)

 

消息循环
BOOL GetMessage{
LPMSG lpMsg, //消息结构体指针
HWND hWnd, //想要获取的窗口的句柄,如果设置位NULL,那就获取热河窗口
UINT wMsgFilterMin, //设定消息的最小值,最先的
UINT wMsgFilterMax //指消息的最大值,最后的

}//返回值为真,即是死循环。


MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);//能够把按键按下转换为ASCII码(WM_KEYDOWM...)
DispatchMessage(&msg);//将收到的消息传到回调函数

}

猜你喜欢

转载自www.cnblogs.com/jianmoxiansheng-Guo/p/11253570.html