1、GUI應用程序的概述
一、現代操做系統支持GUI界面windows
(1)、現代操做系統提供原生SDK支持GUI程序開發函數
(2)、GUI程序開發是現代操做系統上的主流技術ui
(3)、不一樣操做系統上的GUI開發原理相同spa
(4)、不一樣操做系統上的GUI SDK不一樣操作系統
二、GUI應用程序開發原理翻譯
(1)、GUI應用程序在運行時會建立一個消息隊列code
(2)、系統內核將用戶的操做翻譯成對應的程序消息orm
(3)、程序運行過程當中須要實時處理隊列中的消息blog
(4)、當隊列中沒有消息時,程序將處於停滯狀態隊列
(5)、不一樣的操做系統支持相同的GUI開發原理
三、GUI程序開發的本質
一、GUI程序開發
(1)、在代碼中用程序建立窗口及窗口元素
(2)、在消息處理函數中根據程序消息做出不一樣的相應
(3)、經典GUI開發模式(可視化界面開發+消息映射)
四、GUI程序開發實例
(1)、多數操做系統以c 函數的方式提供GUI SDK
(2)、以Windows操做系統爲例
程序分析:
#include <windows.h> #define STYLE_NAME L"MainForm" #define BUTTON_ID 919 //主窗口定義 BOOL DefineMainWindow(HINSTANCE hInstance); //主窗口建立 HWND CreateMainWindow(HINSTANCE hInstance, wchar_t* title); //主窗口內部元素建立函數 HWND CreateButton(HWND parent, int id, wchar_t* text); //主窗口顯示函數 HWND DisplayMainWindow(HWND hWnd, int nCmdShow); //主窗口消息處理函數 LRESULT CALLBACK WndProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam); static HWND MainWindow = NULL; //主窗口句柄 BOOL WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG Msg = { 0 }; //1.自定義主窗口樣式 if (!DefineMainWindow(hInstance)){ return FALSE; } //2.建立主窗口 MainWindow = CreateMainWindow(hInstance, STYLE_NAME); if (MainWindow) { //3.建立主窗口中的控件元素 CreateButton(MainWindow, BUTTON_ID, L"My Button"); //4.在屏幕上顯示主窗口 DisplayMainWindow(MainWindow, nCmdShow); } else { return FALSE; } //5.進入消息循環 while (GetMessage(&Msg,NULL,0,0)) { //6.翻釋並轉換系統消息 TranslateMessage(&Msg); //7.分發消息到對應的消息處理函數 DispatchMessage(&Msg); } return Msg.wParam; } BOOL DefineMainWindow(HINSTANCE hInstance) { static WNDCLASS WndClass = { 0 };//系統結構類型,用於描述窗口樣式 WndClass.style = 0; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW); //定義窗口背景色 WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //定義鼠標樣式 WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //定義窗口左上角圖標 WndClass.hInstance = hInstance; //定義窗口樣式屬於當前應用程序 WndClass.lpfnWndProc =(WNDPROC)WndProc; //窗口消息處理函數 WndClass.lpszClassName = STYLE_NAME; //窗口樣式名 WndClass.lpszMenuName = NULL; //將定義好的窗口樣式註冊到系統上 return RegisterClass(&WndClass); } HWND CreateMainWindow(HINSTANCE hInstance, wchar_t* title) { HWND hWnd = NULL; hWnd = CreateWindow(STYLE_NAME, //經過定義好的窗口樣式建立主窗口 title, //主窗口標題 WS_OVERLAPPEDWINDOW,//建立後主窗口的顯示風格 CW_USEDEFAULT, //主窗口左上角x座標 CW_USEDEFAULT, //主窗口左上角y座標 CW_USEDEFAULT, //主窗口寬度 CW_USEDEFAULT, //主窗口高度 NULL, //父窗口 NULL, //主窗口菜單 hInstance, //主窗口屬於當前應用程序 NULL); return hWnd; } HWND DisplayMainWindow(HWND hWnd, int nCmdShow) { ShowWindow(hWnd, nCmdShow); //顯示窗口 UpdateWindow(hWnd); //刷新窗口 return hWnd; } HWND CreateButton(HWND parent, int id, wchar_t* text) { HINSTANCE hInstance = (HINSTANCE)GetWindowLong(parent, GWL_HINSTANCE); HWND hWnd = NULL; hWnd = CreateWindow(L"button", //經過系統預約義的窗口樣式建立元素 text, //窗口元素標題 WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,//建立後窗口元素的顯示風格 50, //窗口元素在主窗口左上角x座標 50, //窗口元素在主窗口左上角y座標 200, //窗口元素寬度 60, //窗口元素高度 parent, //父窗口 (HMENU)id, //窗口元素ID值 hInstance, //窗口元素屬於當前應用程序 NULL); return hWnd; } LRESULT CALLBACK WndProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: PostQuitMessage(0); break; default: //調用系統提供的默認消息處理函數 return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
2、小結
(1)、現代操做系統提供原生的SDK支持GUI程序開發
(2)、不一樣操做系統上的GUI SDK不一樣
(3)、不一樣操做系統上的GUI開發原理相同
(4)、GUI程序開發包括
A、在代碼中用程序建立窗口及窗口元素
B、在消息處理函數中根據程序消息做出不一樣響應