C/C++_log2000_空白窗口3及初步gui编程笔记
2017-06-04 20:14
441 查看
纯C实现一个空白窗口entry3 & C语言gui编程之绪论、微软API和编程环境笔记
备份用
WIMP 基本编程模型现代图形用户界面开发架构
现代图形用户界面
学习目的和方法
学会编写图形用户界面的软件。
品味图形界面系统的面向对象模型。
探索面向对象设计精髓。
提升代码量,积累编程经验。
Win32 Application Programming Interface
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
hInstance 程序可执行模块的句柄(.exe).
hPrevInstance 16位时代遗留,取值NULL
lpCmdLine 命令行参数
nCmdShow 一个将要传递给ShowWindow()的整数,
程序只能在内存中运行,但是内存大小远小于硬盘,所以……内存常常不够用,
解决方法
只把最常用的数据驻留内存,建立动态管理机制。Windows内存管理器经常在内存中来回移动对象。
结果产生了新的问题
Windows程序往往都会运行很久,可能过了一会儿,有的数据就被移走了。
影响:直接用指针变量存储地址是不行的!
Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,这就是句柄。
句柄的维护
Windows内存管理器在移动对象在内存中的位置后,把对象的新地址自动更新到句柄地址来保存。
简单理解
句柄地址(稳定)→记载着对象在内存中的地址→对象在内存中的地址(不稳定)→实际对象
Win32图形库的源代码:
DECLARE_HANDLE(HINSTANCE); #define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
宏展开
struct HINSTANCE__ { int unused;};typedef struct HINSTANCE__ *HINSTANCE;
句柄的数据类型:一个可看作无类型的指针。
讨论:方便强制转换,但安全性是无法保障的。
LPSTR是
char*,LPCSTR是
const char*
UINT是
unsigned int
理解:
实际上就是一些字母简写,通过Typedef定义
LP前缀代表
Long Pointer
一个C接在LP后面表示是常量指针
W或T表示UNICODE编码,一种国际化编码
注册窗体类
填写一个WNDCLASSEX结构体的成员并调用RegisterClassEx()
cbSize 结构体的大小.
style 类的式样
lpfnWndProc 指向窗口过程的函数指针
cbClsExtra 配置给这个类的额外內存
cbWndExtra 配置给每个窗口的额外內存
hIcon 当用戶按下Alt+Tab时显示的大图标
hCursor 在窗口上显示的光标
hbrBackground 设置我们窗口背景顏色的背景刷子
lpszMenuName 这个类的窗口所用的菜单资源的名字
lpszClassName 类的名字
hIconSm 在任务栏和窗口的左上角显示的小图标(一般为16*16)
创建窗体
WINUSERAPI HWND WINAPI CreateWindowExW(
WINUSERAPI和WINAPI宏是编译约定,约定如参数压入堆栈的顺序为从右到左,显示地从动态链接库导入函数等。
DWORD dwExStyle, //扩展窗体式样
LPCWSTR lpClassName, //窗体类的名字
LPCWSTR lpWindowName,//窗体标题
DWORD dwStyle,//窗口式样参数
int X,int Y,int nWidth,int nHeight,//窗体大小
HWND hWndParent, //父窗口的句柄
HMENU hMenu, //菜单句柄
HINSTANCE hInstance,//应用程序实例句柄
LPVOID lpParam //窗口额外数据的指针
);
ShowWindow(hwnd, nCmdShow);//显示设置
UpdateWindow(hwnd);//更新窗体
消息循环
while(GetMessage(&Msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam;
过程:
不断循环:取得消息,预处理、发送到窗体的过程
消息处理过程
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_CLOSE: DestroyWindow(hwnd); } return 0; }
WM_CLOSE
是在我们按下关闭按钮或按下Alt+F4组合时产生的消息。使窗口销毀。
DestoryWindow()
向要销毀的窗口送出WM_DESTORY消息。
WM_DESTORY
删除窗体和子窗体的消息。
PostQuitMessage()
向消息循环发出WM_QUIT消息。我们永远收不到这个消息,因为它使GetMessage()返回FALSE。
Qt功能框架
visitor tracker
相关文章推荐
- 《C++ GUI Qt 4 编程》 笔记(一)
- 《C++ GUI Qt 4 编程》 笔记(七)
- C++MFC编程笔记day03 MFC工具栏、状态栏、视图窗口
- 《C++ GUI Qt 4 编程》 笔记(五)
- C/C++_log2000_空白窗口2
- C++MFC编程笔记day04 运行时类信息和窗口的动态、静态切分
- 《C++ GUI Qt 4 编程》 笔记(六)
- C/C++_log2000_空白窗口1
- 《C++ GUI Qt 4 编程》 笔记(三)
- 《C++ GUI Qt 4 编程》 笔记(四)
- C++ STL编程初步摘抄笔记:using stl/30分钟学会STL
- c++网络编程学习笔记(3)
- C++ GUI QT 编程(第二版) -第2章 (sort)对话框
- SQLite数据库编程初步(C++)
- Windows编程 C++ DLL编程 学习笔记(一)静态链接库的创建和使用
- C++ GUI QT 编程(第二版) -第3章 (创建对话框)_2
- C++ GUI Qt 4 编程(第二版)
- 高质量C++/C编程指南学习笔记(上)
- C++ Primer学习笔记:C++与C不同的编程习惯
- 读书笔记 - C++ GUI Qt4 编程(第二版)- Qt 父子对象机制的内存管理