一,基本概念

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编程基础的更多相关文章

  1. SDk编程基础

    一.Android简介: 由Andy Rubin开发, 常用手机版本:谷哥:Nexus.华为:EMUI.魅族:Flyme Adnroid是运行在Java虚拟机(JVM)上大部分免费的开源的.应用通过权 ...

  2. 消息机制 - Windows程序设计(SDK)004

    消息机制 让编程改变世界 Change the world by program 内容节选: 我们来回顾一下,窗口是怎么从代码中诞生出来的? 1. 首先我们是通过给 WNDCLASS 窗口类结构各个成 ...

  3. 羽夏看Win系统内核——消息机制篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  4. 基础篇-Windows消息机制

    1在介绍Windows 消息运行机制之前,首先介绍一下消息的概念: 消息(Message)指的就是Windows 操作系统发给应用程序的一个通告[5],它告诉应用程序某个特定的事件发生了.比如,用户单 ...

  5. 消息机制2 - Windows程序设计(SDK)005

    消息机制2 让编程改变世界 Change the world by program 内容节选: 关于消息机制,还有三点需要补充: 消息队列是FIFO的形式 WM_PAINT,WM_TIMER 和 WM ...

  6. Win32 SDK 编程开始, 创建窗口, 消息的处理, 消息循环

    Windows SDK 编程的一般步骤为: 1. 注册窗口类, 使用到的结构 WNDCLASSEX, 函数 RegisterClassEx. 2. 创建窗口, 函数 CreateWindowEx. 3 ...

  7. Android 基础 十一 Android的消息机制

    Handler是Android消息机制的上层接口,这使得在开发应用过程中我们只需要和Handler交互即可.Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去 ...

  8. Windows消息机制详解

    消息是指什么?      消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用 ...

  9. Windows消息机制概述

    消息是指什么?     消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用程 ...

随机推荐

  1. 面向对象 继承 抽象类 接口 static 权限修饰符

    Day01 面向对象 继承 抽象类 接口 static 1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出 ...

  2. [SoapUI] UrlEncode编码/UrlDecode解码网站

    http://tool.chinaz.com/Tools/URLEncode.aspx 解码: 编码:

  3. nuget get-package id显示不全

    Get-Package | ft -AutoSize 参考 https://stackoverflow.com/questions/5036719/is-there-a-way-to-get-the- ...

  4. 掌握所有IO口的外部中断

    外部中断配置流程 1.初始化IO口工作在普通IO.上拉输入状态. 2.首先开IO口组中断(P0IE=1.P1IE=1.P2IE=1): 3.开组内对应的具体某IO口中断(P0IEN.P1IEN.P2I ...

  5. Web测试实践--Rec 2

    累计完成任务情况: 阶段内容 参与人 进行用户调研 小熊 开会学习作业要求,取得共识 全体 注: 1."阶段内容"划斜线表示完成.2.采用倒序. 具体情况: 小熊主要围绕以下几方面 ...

  6. [GO]runtime包及gosched的使用

    Gosched:让出CPU时间片 Goexit:退出当前的协程 GOMAXPROCS:设置使用最大的CPU数量(哇,牛逼了...) package main import ( "fmt&qu ...

  7. 盒子模型 以及CSS的box-sizing属性。

    盒子模型有两种 一种是 内容盒子模型 一种是边框盒子模型. 内容盒子模型(标准盒子模型)由width和height中指定的元素的尺寸不包括内边距和边框 仅是指的内容的实际尺寸: 网上搜索了两张配图不错 ...

  8. centos 7 安装jdk8

    到官网下载jdk http://www.oracle.com/technetwork/java/javase/downloads/index.html 选择liunx的tar.gz文件下载 下载好后 ...

  9. Label下FormattedText中的Span无法使用Binding的解决方法

    在Xamarin.Forms中,Xaml的模板功能并没有原生WPF丰富,比如Label中虽然有FormattedText可以添加Span来丰富Label的功能,但是下面的Span中的Text并没有绑定 ...

  10. 简单几步,提升.Net Core的开发效率

    附加IIS进程调式? 以前在开发ASP.NET(MVC)项目的时候,为了加快程序的启动速度(调式),我们会选择使用IIS.先用IIS架设还在开发的项目,在需要调式的时候附加进程,而在更多时候,如果调整 ...