(一)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发出一个通知,告诉应用程 ...
随机推荐
- VisualVM远程连接Tomcat(转)
转自:http://www.cnblogs.com/sunshine-2015/p/5547128.html VisualVM VisualVm是一个将很多JDK命令工具可视化的windows程序,直 ...
- 阿里云WindowsServer2012安装IIS失败
本文地址:http://www.cnblogs.com/drfxiaoliuzi/p/6388417.html 首先,向微软官方论坛的大神致敬: https://social.technet.micr ...
- [转]Python-__builtin__与__builtins__的区别与关系(超详细,经典)
在学习Python时,很多人会问到__builtin__.__builtins__和builtins之间有什么关系.百度或Google一下,有很 多答案,但是这些答案要么不准确,要么只说了一点点,并不 ...
- myeclipse工程中library 和 web-inf下lib的区别
eclipse工程下的library是用来编译里面的src中java文件的实际发布到tomcat时,仅仅只复制了WEB-INF/lib里面的jar包,所以出现eclipse可以正常编译但tomcat运 ...
- 【转】ConcurrentMap 分析和思考
预备知识:Java HashMap and HashSet 的实现机制 由预备知识可以知道hashmap 的存储结构为: (图像来自http://www.ibm.com/developerworks/ ...
- functions函数插件的定义和使用
创建Smarty插件:在插件目录(plugins)里新建文件 类型.插件名.php文件,然后插件方法名字书写规范: smarty_类型_插件名([...]){}在模板(tpl文件)中调用插件时格式{插 ...
- Ubuntu14.04下redis安装 配置, redis主从配置
1.到官网下载redis源码包 wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解压 并 编译 .tar.gz cd redis ...
- SQl语句收藏
/* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ mysq ...
- idea 启动报错问题
Artifact SpiderServer:war exploded: Error during artifact deployment. See server log for details. 1. ...
- Assigning retained object to weak property object will be released after assignment
在ARC中,如果添加了weak的属性.初始化了相关的object然后给这个属性赋值的时候就会看到Xcode给出这个提示. 这个时候可以这么处理:在别的地方已经retain这个object的引用. @p ...