1. 程式人生 > >windows程式設計 建立一個新的視窗

windows程式設計 建立一個新的視窗

#include <windows.h>

LRESULT CALLBACK myProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){

	static TCHAR szClassName[] = TEXT("cabbage");

	MSG msg;//訊息結構
	HWND hwnd;//視窗控制代碼
	WNDCLASS wc;//視窗類別結構

	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//視窗背景顏色
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);//游標
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);//小圖示
	wc.hInstance = hInstance;//例項控制代碼
	wc.lpfnWndProc = myProc;//回撥函式
	wc.lpszClassName = szClassName;//類名
	wc.lpszMenuName = NULL;//選單
	wc.style = CS_VREDRAW | CS_HREDRAW;

	//註冊視窗 為程式視窗註冊視窗類別
	if(!RegisterClass(&wc)){
		MessageBox(NULL, TEXT("註冊視窗失敗"), szClassName, MB_ICONERROR);
		return 0;
	}

	//建立視窗 根據視窗類別建立一個視窗
	hwnd = CreateWindow(szClassName,//視窗類名
		TEXT("hello insert"),//視窗標題
		WS_OVERLAPPEDWINDOW,//視窗顯示樣式
		CW_USEDEFAULT, CW_USEDEFAULT,//視窗在顯示器上顯示離左上角的距離,橫軸為x,縱軸為y
		CW_USEDEFAULT, CW_USEDEFAULT,//寬口寬度和高度
		NULL, NULL, hInstance, NULL);//

	//顯示視窗 在螢幕上顯示視窗
	ShowWindow(hwnd, nCmdShow);
	//重新整理視窗 只是視窗自我更新
	UpdateWindow(hwnd);

	//訊息迴圈
	while(GetMessage(&msg, NULL, 0, 0)){//獲取訊息 從訊息佇列中取得訊息
		TranslateMessage(&msg);//翻譯訊息 轉譯某些鍵盤訊息
		DispatchMessage(&msg);//分發訊息 將訊息傳送給視窗訊息處理程式
	}

	return 0;
}

LRESULT CALLBACK myProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){

	PAINTSTRUCT ps;//繪圖結構
	HDC hdc;//裝置內容控制代碼
	RECT rect;//矩形結構

	switch(msg){
	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);//開始繪製視窗

		GetClientRect(hwnd, &rect);
		DrawText(hdc, TEXT("你好,愛白菜的小昆蟲!"), -1, &rect,
			DT_SINGLELINE | DT_CENTER | DT_VCENTER);
		
		EndPaint(hwnd, &ps);//結束繪製視窗
		break;
	case WM_DESTROY://銷燬視窗訊息
		PostQuitMessage(0);//丟擲退出程式訊息
		break;
	}

	//返回執行內定的訊息處理
	return DefWindowProc(hwnd, msg, wParam, lParam);
}

  

執行結果