一、GUI应用程序的概述1、现代操作系统支持GUI界面 (1)、现代操作系统提供原生SDK支持GUI程序开发 (2)、GUI程序开发是现代操作系统上的主流技术 (3)、不同操作系统上的GUI开发原理相同 (4)、不同操作系统上的GUI SDK不同 2、GUI应用程序开发原理 (1)、GUI应用程序在运行时会创建一个消息队列 (2)、系统内核将用户的操作翻译成对应的程序消息 (3)、程序运行过程中需要实时处理队列中的消息 (4)、当队列中没有消息时,程序将处于停滞状态 (5)、不同的操作系统支持相同的GUI开发原理 3、GUI程序开发的本质 1、GUI程序开发 (1)、在代码中用程序创建窗口及窗口元素 (2)、在消息处理函数中根据程序消息作出不同的相应 (3)、经典GUI开发模式(可视化界面开发+消息映射) 4、GUI程序开发实例 (1)、多数操作系统以c 函数的方式提供GUI SDK (2)、以Windows操作系统为例 程序分析: [url=][/url]
#include #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;}[url=][/url]
二、小结(1)、现代操作系统提供原生的SDK支持GUI程序开发 (2)、不同操作系统上的GUI SDK不同 (3)、不同操作系统上的GUI开发原理相同 (4)、GUI程序开发包括 A、在代码中用程序创建窗口及窗口元素 B、在消息处理函数中根据程序消息作出不同响应
0
|
|
|
|