һ���Ĵ���![[images/simple_window.gif]](images/simple_window.gif)
������simple_window
��
������ʱ��������IRC���ʣ�������ô��ʵ��һ�����ڣ����������Ҿ��ò���һ��������˵���������Ȼһ����������Ҫ��ʲô���ѣ��������ȷ��Ҫ��һЩ������ʹ��ʾһ�����ڣ���Щ���鲻������������һ����˵������ģ�
����������ϲ������һ������Ȼ���������������������ȸ���һ�����ڵĴ����Ժ��������ͣ�#include <windows.h>
const char g_szClassName[] = "myWindowClass";
// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
//Step 1: Registering the Window Class
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// Step 2: Creating the Window
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"The title of my window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
NULL, NULL, hInstance, NULL);
if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// Step 3: The Message Loop
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
��������˵�������봴��һ��������д����ij�������70�����ҵĴ��룮�����һ��������ͨ���˱��룬���ҲӦ�ò�������.
��һ��:ע�Դ�����
����һ���������ࡡ�洢����һ�����ڵ���Ϣ���������ƴ��ڵĴ��ڹ��������ڵĴ�Сͼ�����Լ������ɫ.�����ַ�ʽ���������ע��һ����������Ȼ���������������Ŀ�Ĵ�����������Ҫһ�δε�ָ����Щ�����������Ҫ���������������Ե����Ĵ���������.
��������˵�Ĵ�������C++�е�������ȫ��ͬ�ĸ���.
const char g_szClassName[] = "myWindowClass";
����ı����洢�����Ǵ���������֣����ϻ�������ϵͳע�Դ����࣮ WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
��������������WinMain()��ע�����ǵĴ�����Ĵ��룮������дһ��WNDCLASSEX�ṹ��ij�Ա������RegisterClassEx()��
�����ṹ��ij�Ա�Դ������Ӱ�����£�
cbSize
�����ṹ��Ĵ�С��
style
�������ʽ��(CS_*)����Ҫ������ʽ��(WS_*)������.���һ������Ϊ0��
lpfnWndProc
����ָ�����������Ĵ��ڹ��̵�ָ�룮
cbClsExtra
�������ø������Ķ���ȴ�.һ��Ϊ0��
cbWndExtra
�������ø�������ÿ�����ڵĶ���ȴ�.һ��Ϊ0��
hInstance
����Ӧ�ó���ʵ���ľ��������WinMain()��һ����������������
hIcon
�������Ñ�����Alt+Tab���ʱ����ʾ�Ĵ�ͼ�꣨һ��Ϊ32*32����
hCursor
���������ǵĴ�������ʾ�Ĺ�꣮
hbrBackground
�����������Ǵ��ڱ����ɫ�ı���ˢ�ӣ�
lpszMenuName
���������Ĵ������õIJ˵���Դ�����֣�
lpszClassName
����������֣�
hIconSm
�������������ʹ��ڵ����Ͻ���ʾ��Сͼ��(һ��Ϊ16*16)��
����������ò��������Ȳ�Ҫ���ģ����ϻ��н��⣮����Ҫ��ס��һ�������Dz�Ҫ��ͼȥ������Щ�������һ����ϲ������������ǽṹ������IJ��������������˷Ѿ�������Ҫ��ʱ�䣮�����֪��Ҫ���õĺ������ȥ������������İ����ĵ��в�һ�£�Ҫ�Ǜ]�а����ĵ��������뷨Ū�����]�������Ǻ����Ƶģ�������ʹ�ö�κ�Ҳ������ס��Щ��õĺ����IJ�����
����Ȼ�����ǵ���RegisterClassEx()������Ƿ�ɹ������ʧ�����ǵ���һ����ʾ��Ϣ����WinMain()�����˳�����
�ڶ���:��������
����һ����ע���������Ǽ��ɴ�������һ����������Ӧ��ȥ��һ��CreateWindowEx()�IJ����б�������Ҫ��һ����API��ʱ��������Ҫ������)�������һ������������Ľ�����
HWND hwnd;
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"The title of my window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
NULL, NULL, hInstance, NULL);
������һ��������WS_EX_CLIENTEDGE������չ�Ĵ���ʽ������������������õ�һ���Ȳ����ݵı߿�Ч������������0����Ч����Ҫϰ�����Բ�ͬ��ֵ��Ч����
���������������������������g_szClassName��������ϵͳ����Ҫ����ʲô���Ĵ�������Ϊ����Ҫ�Ӹո�ע�Ե��ഴ������������ʹ���˸����������֮������ָ�������Ǵ��ڵ����ֻ��DZ�����������ʾ�����Ǵ��ڵ���ۻ��DZ���������
�����������õ�WS_OVERLAPPEDWINDOW��һ������ʽ�������������кܶණ������Բ��Ҳ����������������н����˵����
�������������ĸ�������CW_USEDEFAULT��CW_USEDEFAULT��320��240�������Ǵ��ڵ����Ͻǵ�X��Y���������Ⱥ߶����Ұ�X��Y������ΪCW_USEDEFAULT����ϵͳ�Լ�ѡ������Ļ���ĸ��ط������ô�������ס��Ļ������ߵ�X����Ϊ0�����Ҽ�����Ļ�Ķ�����Y����Ϊ0�����.��λ��������������Ļ���ض��ķֱ���������ʾ����С��λ��
�����ٽ��������ĸ���NULL��NULL��g_hInst��NULL���քe�Ǹ����ڵľ�����˵������Ӧ�ó���ʵ��������ʹ��ڴ������ݵ�ָ��.��windowsϵͳ��������Ļ�ϵĴ������Էֲ�εĸ��������Ӵ��ڵ���ʽ����֯�������㿴��һ����������һ����ťʱ������ť�����Ӵ������������Ĵ��ھ��Ǹ�����.���ǵ��������������ڵľ��ΪNULL����Ϊ����]�и�����������������ǵ������ڻ��Ƕ��㴰��.�˵�Ҳ��NULL����Ϊ��������Ҳ�]�в˵�.ʵ�������Ϊ���Ǵ�WinMain()�õ��ĵ�һ������.���ڵĴ�������(���Ǽ����]��ʹ��)�����������Ĵ��ڷ��Ͷ�������������Ҳ��ΪNULL��
�����������֪�������NULL��ʲô����ʵ���ϱ�����Ϊ0(��).������C�������DZ�����Ϊ((void*)0)������Ϊ��������ָ���õ�.�������п����ڰ�NULL������ʹ��ʱ��õ�����������ı������ľ��漶�e�����й�������Ժ������������Ҳ������0��������
�������������Ƿ�ɹ������dz���ԱΪ�Ҳ�������������������յ����������r��CreateWindow()���ܻ����ʧ������ʹ����һ���þ���ij���Ա��ԭ����ǿ��ܷ�����ĵط�ʵ��̫������������ѧ������ο��ٲ��������������Ӧ�ø��Լ�һ������֪����������˴���һ����ס��鷵��ֵ��
if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
���������Ǵ����˴��ڲ��������ȷ��������һ����ȷ�ľ����������ʹ��WinMain()���IJ�������ʾ�������ٸ�������ȷ��������Ļ����ȷ���ػ����Լ���
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
����nCmdShow�ǿ�ѡ�IJ���������Լش���SW_SHOWNORMAL����.�����ô�WinMain()�����IJ����ɸ������д˳�����Ñ�ѡ���Կ��ӣ������С����ѡ�������������������ɣ��������windows��ݷ�ʽ�������п�����Щѡ�������ѡ�����Q��.
����������Ϣѭ��
����������������K�������м������еĿ��ƶ�������㴫����
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
����GetMessage()����Ӧ�õ���Ϣ������ȡһ����Ϣ.�κ�ʱ���Ñ��ƶ���꣬�û����̣�����㴰�ڵIJ˵��������e��ʲô�£�ϵͳ�������Ϣ�����뵽��ij������Ϣ������ȥ������GetMessage()ʱ��������һ�����õ���Ϣ�Ӷ�����ɾ�������ظ������������������Ϊ�գ�GetMessage()����������㲻��Ϥ����������ζ��һֱ�ȴ�ֱ���õ�һ����Ϣ���ŷ��ظ���.
����TranslateMessage()Ϊ�����¼���һЩ����Ĵ�����������WM_KEYDOWN��Ϣ����WM_CHAR��Ϣ�����DispatchMessage()����Ϣ�͵���ϢӦ�ñ��͵��Ĵ���.
���������ǵ������ڻ�����һ������һ���ؼ�����Щ��r����һ����ϵͳ�����������Ĵ��ڣ��ⲻ������Ҫ���ĵģ���Ϊ������Ҫ�������ǵõ���Ϣ���ͳ���ϵͳ�������������ȷ����������ȷ�Ĵ��ڣ�
���IJ������ڹ���
�������˵��Ϣѭ���dz�������K���Ǹ����ڹ��̾��dz���Ĵ��������������͵����ڵ���Ϣ��������
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
�������ڹ�����ÿ����Ϣ����ʱ������һ����HWND��������Ϣ��Ӧ�Ĵ��ڵľ���������Ҫ��Ϊ���������ͬ���ഴ���������������ڲ�����������ͬ�Ĵ��ڹ���(WndProc())����ͬ����ڲ�ͬ�Ĵ����в�ͬ��hwnd�������������ǵõ�WM_CLOSE��Ϣ���Ǿ�Ҫ�����Ǹ�����������ʹ���˴��ھ����Ϊ���ǵõ��ĵ�һ�������������Ĵ��ڶ�������Ӱ���������Ǹ�������Ҫ������֮����
����WM_CLOSE�������ǰ��¹رհ�ť ����Alt+F4���ʱ����������Ĭ�ϻ�ʹ��������������ϲ����ʽ����������Ϊ�����ڳ����˳�֮ǰ������������ѯ���Ñ��Ƿ��ļ�������ľ��ѵ�λ����
���������ǵ���DestoryWindow()ϵͳ��Ҫ�����Ĵ����ͳ�WM_DESTORY��Ϣ�����������ǵĴ��������ڴ�ϵͳ�Ƴ����ǵĴ���֮ǰɾ����ʣ�µ����е��Ӵ�������Ϊ�������ǵij�����Ψһ�Ĵ��������ǜʱ����˲�ϣ�������˳����������ǵ�����PostQuitMessage()������������Ϣѭ������WM_QUIT��Ϣ�����Dz���Զ�ղ��������Ϣ����Ϊ��ʹGetMessage()����FALSE��������Ҳ���Կ������ǵ���Ϣѭ������������ʱ������ֹͣ������Ϣ���������յĽ���������Ǵ��ݸ�PostQuitMessage()��WM_QUIT�е�wParam�������������ֵֻ������ı��Ϊ���e�ij�����ò�������Ҫһ��ȷ���ķ���ֵʱ���������������
���岽���]�е��岽
����Phew����һ�������������ȸ�һ����.������滹�]�н�������Ļ��������ȷ�����Ҳ�������ڽ�������õij���ʱ��Щ������������������
|