(一)Win消息机制,SDK编程基础
一,基本概念
SDK:软件开发工具包(缩写:SDK、外语全称:Software Development Kit)
API:应用程序接口
WINAPI:Windows平台下的系统调用,包含 windows.h
窗口:父窗口和子窗口,客户区和非客户区
句柄:结构体变量,窗口句柄 :HWND,图标句柄:HICO,类似于文件操作符,进程控制块等
消息队列
消息
窗口过程函数
main()
WinMain() // WINAPI 入口地址
二,winAPI窗口程序
1.定义入口函数Win Main()
2.创建一个窗口
a),设计窗口类 WNDCLASS (给成员变量赋值)
b),注册窗口类
c),显示和更新窗口
3,消息循坏
4,窗口过程函数
MSDN:winAPI,MFC
#include <Windows.h> LRESULT CALLBACK WindowProc(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
return DefWindowProc(hwnd,uMsg,wParam,lParam);
} // WINAPI:修饰函数,规定函数参数入栈从右往左,函数调用完毕,自动清理堆栈
// CALLBACK
int WINAPI WinMain(HINSTANCE hInstance, // 应用程序实例
HINSTANCE hPreInstabce,// 上一个应用程序实例,不用
LPSTR lpCmdLine, // LPSTR :typedef CHAR * LPSTR,long pointer string. 命令行参数
int nCmdShow // 窗口显示的样式,最大化,最小化
)
{
/*
1,定义入口函数WinMain()
2,创建一个窗口
a),设计窗口类 WNDCLASS (给成员变量赋值)
b),注册窗口类
c),显示和更新窗口
3,消息循环
4,窗口过程函数
*/ // 设计窗口类 WNDCLASS
WNDCLASS wc;
wc.cbClsExtra = ;// 类的附加信息
wc.cbWndExtra = ;// 窗口的附加信息 // 获取系统默认的白色画刷
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 背景色,必须写
//wc.hCursor = NULL; // 使用默认
wc.hCursor = LoadCursor(NULL, IDC_HELP); // 加载系统默认光标
//wc.hIcon = NULL;
wc.hIcon = LoadIcon(NULL,IDI_WARNING); // 加载系统默认图标 wc.hInstance = hInstance; // 应用程序实例
wc.lpfnWndProc = WindowProc; // 窗口过程函数名字,消息处理函数 wc.lpszClassName = TEXT("abc"); // 类的名字
wc.lpszMenuName = NULL; // 菜单的名字
wc.style = nCmdShow; // 显示风格 // 注册窗口类,告诉系统窗口过程函数的入口地址
RegisterClass(&wc); // 创建窗口类
HWND hWnd = CreateWindow(TEXT("abc"),
TEXT("hello,windows"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
// 显示和更新窗口
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd); // 消息循环
MSG msg;
// 如果接收到 WM_QUIT,返回 0,退出
// 如果出错,返回 -1,不退出
while (GetMessage(&msg, hWnd, , )) {
// 翻译工作
// 虚拟按键转为标准字符 WM_CHAR
TranslateMessage(&msg); // 给操作系统分发消息
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WindowProc(HWND hwnd, // 窗口句柄,消息所属的窗口
UINT uMsg,// 消息标志
WPARAM wParam,// 附件信息
LPARAM lParam
)
{
switch (uMsg)
{
case WM_LBUTTONDOWN:
MessageBox(hwnd,TEXT("ABC"), TEXT("鼠标左键安下"),MB_OK);
break;
case WM_DESTROY:
PostQuitMessage(); // WM_QUIT,给主函数 return msg.wParam
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
} }
绘图
LRESULT CALLBACK WindowProc(HWND hwnd, // 窗口句柄,消息所属的窗口
UINT uMsg,// 消息标志
WPARAM wParam,// 附件信息
LPARAM lParam
)
{
switch (uMsg)
{
case WM_LBUTTONDOWN:
MessageBox(hwnd,TEXT("ABC"), TEXT("鼠标左键安下"),MB_OK);
break;
case WM_PAINT:
{
PAINTSTRUCT ps;// 绘图结构体
HDC dc = BeginPaint(hwnd, &ps); // 开始
WCHAR *p = L"aaaaaaa";// 转为宽字节
TextOut(dc, , , p, wcslen(p));
EndPaint(hwnd, &ps);
break;
} case WM_DESTROY:
PostQuitMessage(); // WM_QUIT,给主函数 return msg.wParam
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
} }
(一)Win消息机制,SDK编程基础的更多相关文章
- SDk编程基础
一.Android简介: 由Andy Rubin开发, 常用手机版本:谷哥:Nexus.华为:EMUI.魅族:Flyme Adnroid是运行在Java虚拟机(JVM)上大部分免费的开源的.应用通过权 ...
- 消息机制 - Windows程序设计(SDK)004
消息机制 让编程改变世界 Change the world by program 内容节选: 我们来回顾一下,窗口是怎么从代码中诞生出来的? 1. 首先我们是通过给 WNDCLASS 窗口类结构各个成 ...
- 羽夏看Win系统内核——消息机制篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- 基础篇-Windows消息机制
1在介绍Windows 消息运行机制之前,首先介绍一下消息的概念: 消息(Message)指的就是Windows 操作系统发给应用程序的一个通告[5],它告诉应用程序某个特定的事件发生了.比如,用户单 ...
- 消息机制2 - Windows程序设计(SDK)005
消息机制2 让编程改变世界 Change the world by program 内容节选: 关于消息机制,还有三点需要补充: 消息队列是FIFO的形式 WM_PAINT,WM_TIMER 和 WM ...
- Win32 SDK 编程开始, 创建窗口, 消息的处理, 消息循环
Windows SDK 编程的一般步骤为: 1. 注册窗口类, 使用到的结构 WNDCLASSEX, 函数 RegisterClassEx. 2. 创建窗口, 函数 CreateWindowEx. 3 ...
- Android 基础 十一 Android的消息机制
Handler是Android消息机制的上层接口,这使得在开发应用过程中我们只需要和Handler交互即可.Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去 ...
- Windows消息机制详解
消息是指什么? 消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用 ...
- Windows消息机制概述
消息是指什么? 消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用程 ...
随机推荐
- Window: move\copy\xcopy
Move 移动文件和重命名文件与目录. 要移动一个或多个文件: MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination 要重命名目录: MO ...
- Jmeter线程ramp-up period (in seconds)如何取值
线程组主要包含三个参数:线程数.准备时长(Ramp-Up Period(in seconds)).循环次数. 线程数:虚拟用户数.一个虚拟用户占用一个进程或线程.设置多少虚拟用户数在这里也就是设置多少 ...
- 3d点云与cad模型
https://stackoverflow.com/questions/19000096/match-3d-point-cloud-to-cad-model
- rocketmq配置项说明(对应版本:4.0.0-incubating)
Broker配置参数说明 自定义客户端行为 ※一些默认配置的源代码路径 org.apache.rocketmq.store.config --END--
- 设计模式(java)--状态模式
状态模式(State Pattern)是设计模式的一种,属于行为模式. 定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要 ...
- data-参数说明(模态弹出窗的使用)
除了通过data-toggle和data-target来控制模态弹出窗之外,Bootstrap框架针对模态弹出框还提供了其他自定义data-属性,来控制模态弹出窗.比如说:是否有灰色背景modal-b ...
- logcat命令详解【一】
Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过logcat命令来查看和使用. 在使用logcat之前,请确保手机的USB调试 ...
- 在Chrome 39中无法使用插件
在chrome 42+版本中在开启npapi选项. 1.打开插件面板,在地址栏中输入 chrome://plugins 2.找到npScreenCapture插件,点击始终允许选框 3允许控件
- Logstash 算术运算操作
需求:input为json,output为ES,需使用filter提取json中的某个字段,并执行加法.加法.乘法等算法操作 思路:mutate过滤器+ruby过滤器实现 避坑:根据ES及Logsta ...
- Delphi 按Esc快捷键退出程序的简单方法
第一种方法: 在窗体上放一个按钮: 1>.设置按钮的Cancel属性为True: 2>.在按钮的点击事件中写: procedure TForm1.btn1Click(Sender: TO ...