windows程序设计(3):窗口
窗口过程
实例
/*------------------------------------------------------------HELLOWIN.C -- Displays "Hello, Windows 98!" in client area(c) Charles Petzold, 1998------------------------------------------------------------*/#include <windows.h>
#include <mmSystem.h>
#pragma comment(lib,"winmm.lib")//显式的加载静态库,Link里面添加一样的效果
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{static TCHAR szAppName[] = TEXT("HelloWin");HWND hwnd;MSG msg;WNDCLASS wndclass;wndclass.style = CS_HREDRAW | CS_VREDRAW;wndclass.lpfnWndProc = WndProc;wndclass.cbClsExtra = 0;wndclass.cbWndExtra = 0;wndclass.hInstance = hInstance;wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.lpszMenuName = NULL;wndclass.lpszClassName = szAppName;if (!RegisterClass(&wndclass)){MessageBox(NULL, TEXT("This program requires Windows NT!"),szAppName, MB_ICONERROR);return 0;}hwnd = CreateWindow(szAppName, // window class nameTEXT("The Hello Program"), // window captionWS_OVERLAPPEDWINDOW, // window styleCW_USEDEFAULT, // initial x positionCW_USEDEFAULT, // initial y positionCW_USEDEFAULT, // initial x sizeCW_USEDEFAULT, // initial y sizeNULL, // parent window handleNULL, // window menu handlehInstance, // program instance handleNULL); // creation parametersShowWindow(hwnd, iCmdShow);UpdateWindow(hwnd);while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;
}LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{HDC hdc;PAINTSTRUCT ps;RECT rect;switch (message){case WM_CREATE:PlaySound(TEXT("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC);return 0;case WM_PAINT:hdc = BeginPaint(hwnd, &ps);GetClientRect(hwnd, &rect);DrawText(hdc, TEXT("Hello, Windows 98!"), -1, &rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);EndPaint(hwnd, &ps);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hwnd, message, wParam, lParam);
}
显示:
windows的函数调用
数据类型
句柄
匈牙利标记法
窗口类的注册
在创建应用程序窗口之前,必须调用函数RegisterClass来注册窗口类。该函数只需要一个参数,即一个指向WNDCLASS类型的结构的指针。
typedef struct tagWNDCLASSW {UINT style;WNDPROC lpfnWndProc;//lpfn :long pointer to a function 在win32中,长指针和短指针没区别int cbClsExtra;//cb count of byte 表示字节尺寸int cbWndExtra;HINSTANCE hInstance;//h表示一个句柄HICON hIcon;HCURSOR hCursor;HBRUSH hbrBackground;//handle to b brush 画刷的句柄LPCWSTR lpszMenuName;//long pointer to a string terminated with a zero 指向以零结束的字符串的长指针LPCWSTR lpszClassName;
} WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;typedef WNDCLASSW WNDCLASS;
WNDCLASS wndclass;wndclass.style = CS_HREDRAW | CS_VREDRAW;//CS 类风格选项 “位标记” 每个标识符都只影响复合值中的一位; CS_HREDRAW | CS_VREDRAW 指明无论何时窗口的水平尺寸或垂直尺寸被改变,所有基于该窗口类的窗口都将重绘wndclass.lpfnWndProc = WndProc;//将窗口类的窗口过程设为WndProcwndclass.cbClsExtra = 0;wndclass.cbWndExtra = 0;wndclass.hInstance = hInstance;//应用程序的实例句柄wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);//为所有基于该窗口类的窗口设定一个图标wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);//当鼠标出现在其内时,将变成一个小箭头wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//指定背景色;画刷时一个图形学术语,表示用于区域填充的色素着色模式wndclass.lpszMenuName = NULL;//指定窗口类的菜单wndclass.lpszClassName = szAppName;//为窗口类赋予一个名称
注册窗口类
if (!RegisterClass(&wndclass)){MessageBox(NULL, TEXT("This program requires Windows NT!"),szAppName, MB_ICONERROR);return 0;}
窗口的创建
窗口类只是定义了窗口的一般特征,因此基于同一窗口类可以创建许多不同的窗口。在调用CreateWindow函数创建窗口时,可以指定许多与窗口有关的细节信息。
hwnd = CreateWindow(szAppName, // window class nameTEXT("The Hello Program"), // window captionWS_OVERLAPPEDWINDOW, // window style WS_OVERLAPPEDWINDOWCW_USEDEFAULT, // initial x position 相对于屏幕左上角的位置,使用默认值。默认情况下,windows会将连续新建的窗口的左上角位置沿水平方向和垂直方向分别作步长为1的偏移CW_USEDEFAULT, // initial y positionCW_USEDEFAULT, // initial x sizeCW_USEDEFAULT, // initial y sizeNULL, // parent window handle 如果新建的窗口为顶级窗口,父窗口句柄为NULL,通常当两个窗口之间存在父子关系时,子窗口总是位于父窗口的签名NULL, // window menu handlehInstance, // program instance handleNULL); // creation parameters
窗口的显示
消息循环
/** Message Function Templates*/WINUSERAPI
BOOL
WINAPI
GetMessageA(_Out_ LPMSG lpMsg,_In_opt_ HWND hWnd,_In_ UINT wMsgFilterMin,_In_ UINT wMsgFilterMax);
WINUSERAPI
BOOL
WINAPI
GetMessageW(_Out_ LPMSG lpMsg,_In_opt_ HWND hWnd,_In_ UINT wMsgFilterMin,_In_ UINT wMsgFilterMax);
#ifdef UNICODE
#define GetMessage GetMessageW
#else
#define GetMessage GetMessageA
#endif // !UNICODE
窗口过程
消息的处理
WM_CREATE消息
当Windows在WinMain函数中处理CreateWindow函数调用时,WndProc将收到该消息。通常情况下,窗口过程队都会在处理此消息期间对窗口进行一次性的初始化。
WM_PAINT消息
WM_DESTROY消息
队列消息和非队列消息
windows程序设计(3):窗口相关推荐
- Windows程序设计-子窗口控件
按钮类别 /*----------------------------------------BTNLOOK.C -- Button Look Program(c) Charles Petzold, ...
- 中年人学C语言Windows程序设计,20子窗口的创建
今天, 我们要学习的就是 子窗口控件 的使用. 在其他一些 Windows应用软件上我们经常能够看到一些大致相同的按钮.复选框.组合框.列表框等控件, 这些控件很有可能就是使用 标准子窗口控件 来实现 ...
- Windows程序设计之创建窗口示例
Windows程序设计书本上的创建窗口示例,手敲代码,拿出了show,记录一下而已~~~ 一.代码如下: #include <tchar.h> #include <windows.h ...
- c语言lnk1168无法打开exe,跪求大佬帮帮看看LINK : fatal error LNK1168: 无法打开 F:\windows程序设计\窗口\......
马上注册,结交更多好友,享用更多功能^_^ 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 运行的结果显示是这样: 1>------ 已启动生成: 项目: 窗口, 配置: Debug W ...
- 《Windows 程序设计(第3版)》——6.7 【实例】窗口查看器
本节书摘来自异步社区<Windows 程序设计(第3版)>一书中的第6章,第6.7节,作者:王艳平 , 张铮著,更多章节内容可以访问云栖社区"异步社区"公众号查看 6. ...
- Windows程序设计设计第一个窗口
窗口调用的函数的简短解释: 来自小甲鱼的窗口模板: /* -------------------------------------------------------------------MyWi ...
- 中年人学C语言Windows程序设计,9 窗口绘图:直线的画法
标题中年人学C语言Windows程序设计,9 窗口绘画:直线 MoveToEx函数 函数功能: MoveToEx 函数将当前绘图位置移动到某个具体的点,同时也可获得之前位置的坐标. API 函数原型: ...
- MFC Windows 程序设计[六十]之窗口分屏(附源码)
MFC Windows 程序设计[六十]之窗口分屏 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 MFC是微软公司提供的一个类库(class libraries),以C+ ...
- 中年人学C语言Windows程序设计,3 窗口中文本的输出TextOut
中年人学C语言Windows程序设计,3 文本的输出TextOut 函数功能 TextOut 函数使用当前选择的字体.背景颜色和文本颜色,将一个字符串绘制于窗口的指定位置. API 函数原型: 注释: ...
- C语言Windows程序设计 - 【第一个属于自己的窗口】!
☺创建属于自己的窗口 ================== ۞创建窗口前的准备 在创建窗口前我们先来熟悉几个名词, 这些名词现在可以暂时不去透彻的进行理解, 只需要印象中知道有这么回事就行. 1> ...
最新文章
- canvas js 绘图插件_[开盖即食]小程序图表插件eCharts实战
- Vim安装插件在命令行下看代码
- PingingLab传世经典系列《CCNA完全配置宝典》-2.7 EIGRP基本配置
- 第三章 JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程
- PyTorch 1.0 中文文档:数据类型信息
- 发布锁定表头的一个思路
- elupload获取文件名与路径_Python检查word文件中的特殊“标记”词是否与文件名中的一致(实例59)...
- 9个元素换6次达到排序序列_面试题精选(排序算法类)c/c++版 上篇
- nodejs 简单安装环境
- 搭建Web站点和FTP站点
- maxon电机中文名_MAXON电机完全手册(全系列).pdf
- 淘宝技术这十年 -- 目录
- 现成源码抢单软件开发|服务器
- 使用python转换微信dat格式文件为png文件
- 进入fastboot模式后,一连接刷机助手就变成press any key to shutdown
- uniapp父子组件传值
- 京东数科DevOps落地攻略
- 机器学习之数据的偏态分布
- Flink+Iceberg搭建实时数据湖实战
- IdeaUI快捷键注释不在行首
热门文章
- WHQL认证和代码签名
- 如何用AI伴侣同步测试App Inventor软件
- 巴菲特斥资290亿抄底,台积电跌成“白菜价”?
- SAP SD 客户物料主数据
- nim博奕和巴什博奕
- 报盘、还盘的英语短句(建议收藏)
- 项目进度经常延误,该怎么破?
- 2020-06 前端技术汇总
- Error Code: 1318. Incorrect number of arguments for PROCEDURE student.new_procedure; expected 0, got
- 联想笔记本电脑开机黑屏可能是什么原因