#include <windows.h>
#include "resource.h"
HINSTANCE g_instance;
BOOL MyRegisterClass(LPSTR pClassName);
void dispWindow(HWND hWnd);
HWND MyCreateWindow(LPSTR lpClassName);
//入口函數
int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{
g_instance = hInstance;
LPSTR pClassName = "helloWindow";
MyRegisterClass(pClassName);
HWND m_hWnd= MyCreateWindow(pClassName);
if(m_hWnd == NULL)
{
MessageBox(NULL,"create Window fail","",0);
}
dispWindow(m_hWnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
DispatchMessage(&msg);
}
//system("pause");
return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam)
{
switch(nMsg)
{
case WM_QUIT:
;
//CloseWindow(hWnd);
// DestroyWindow(hWnd);
// return DefWindowProc(hWnd,nMsg,wParam,lParam);
case WM_DESTROY:
PostQuitMessage(0);//程序退出消息循環
}
return DefWindowProc(hWnd,nMsg,wParam,lParam);
}
///註冊窗口類
BOOL MyRegisterClass(LPSTR pClassName)
{
WNDCLASS wndClass = {0};
wndClass.style =CS_HREDRAW |CS_VREDRAW | CS_DBLCLKS;
wndClass.hIcon = NULL;
wndClass.hbrBackground = (HBRUSH)COLOR_WINDOWFRAME;
wndClass.lpszClassName ="helloWindow";
wndClass.hInstance = g_instance ;
wndClass.lpfnWndProc = WndProc;
wndClass.hCursor = NULL;
wndClass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
wndClass.lpszClassName = pClassName;
ATOM nATom = RegisterClass(&wndClass);
if(nATom == 0 )
{
MessageBox(NULL,"rigter fail!","",0);
//AfxMessageBox("註冊失敗!");
}
else
{
// MessageBox(NULL,"rigter Ok!","",0);
}
return FALSE;
}
//創建窗口類
HWND MyCreateWindow(LPSTR lpClassName)
{
CREATESTRUCT m_createStruct = {0};
HWND m_wnd = CreateWindow(lpClassName,"hello my window", WS_OVERLAPPEDWINDOW,20,20,640,480,NULL,NULL,g_instance,&m_createStruct);
return m_wnd;
}
void dispWindow(HWND hWnd)
{
ShowWindow(hWnd,SW_SHOWNORMAL);
UpdateWindow(hWnd);
}
//-------------------------------------------------------------------------
第一個窗口程序
3.1 入口函數WinMain
3.2 窗口處理函數
當窗口處理消息事件時,系統調用該函數
LRESULT CALLBACK WindowProc(
HWND hwnd, // 窗口的句柄
UINT uMsg, // 消息的ID號
WPARAM wParam, // 消息所對應的參數
LPARAM lParam // 消息所對應的參數
);
3.3 註冊窗口類型
typedef struct _WNDCLASS {
UINT style; //窗口類的風格
WNDPROC lpfnWndProc; //窗口處理函數
int cbClsExtra; //窗口類附加數據大小
int cbWndExtra; //窗口附加數據大小
HANDLE hInstance; //當前應用程序的實例句柄
HICON hIcon; //窗口圖標
HCURSOR hCursor; //窗口的鼠標
HBRUSH hbrBackground; //窗口的背景畫刷
LPCTSTR lpszMenuName; //菜單
LPCTSTR lpszClassName; //類型名稱
} WNDCLASS;
註冊函數 RegisterClass
3.4 創建窗口
HWND CreateWindow(
LPCTSTR lpClassName, //窗口類型名稱
LPCTSTR lpWindowName, //窗口名稱
DWORD dwStyle, //窗口類型
int x, //窗口的左上角X坐邊
int y, //窗口的左上角X坐邊
int nWidth, //窗口的寬度
int nHeight, //窗口的高度
HWND hWndParent, //父窗口句柄
HMENU hMenu, //窗口菜單句柄
HANDLE hInstance, //應用程序的實例句柄
LPVOID lpParam //創建的參數,一般爲NULL
);
3.5 顯示窗口
ShowWindow 顯示窗口
BOOL ShowWindow(
HWND hWnd, //顯示的窗口句柄
int nCmdShow //顯示的方式
);
UpdateWindow 刷新窗口
3.6 消息處理
GetMessage 獲取消息
DispatchMessage 派發消息
3.7 程序退出
窗口銷燬時,退出程序。在WndProc中實現。
WM_DESTROY: 當窗口銷燬時,會調用WndProc
傳遞給使用者。
PostQuitMessage:發送一個退出消息。