一,基本概念

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. shiro 集成spring 使用 redis作为缓存 学习记录(六)

    1.在applicationContext-redis.xml配置文件中增加如下: 申明一个cacheManager对象 用来注入到  shiro的   securityManager 属性  cac ...

  2. ZPL语言说明文档

    ■格式命令(format commands) 以︿开始 用于设定标签格式与数据 多条格式指令按顺序执行 ■控制指令(control commands) 以~开始 迫使打印机立即执行某一个指令的操作 可 ...

  3. spring源码学习——spring整体架构和设计理念

    Spring是在Rod Johnson的<Expert One-On-One J2EE Development and Design >的基础上衍生而来的.主要目的是通过使用基本的java ...

  4. [原创]升级SOUI WKE以支持_blank

    由于WKE的精简模式,导致原有的SOUI不支持针对诸多内容的调用,此处针对WKE的部分内容做升级,以支持对应的功能. 目的:使WKE可以_blank弹出新窗口. 由国人 海绵宝宝维护的WKE新分支:h ...

  5. centos7如何知道jdk的在哪个目录

    今天一个小实验需要安装jdk,用命令Java -version查询了一下,原来Centos7自带OpenJDK的环境,但是需要手动配置/etc/profile文件,于是开始找java的安装路径.... ...

  6. HttpContext.Current.Session[strName]未将对象引用设置到对象的实例

    项目开发是在4.5.1上,不知道为啥客户提供的服务器上安装的是4.5,差别不大也没去升级,然后部署MVC的时候web.config报错 <system.web> <compilati ...

  7. 安装并使用PICT,生成测试用例

    一.PICT简介 PICT工具是在微软公司内部使用的一款承兑组合的命令行生成工具,现在已经对外提供,可以在 http://download.microsoft.com/download/f/5/5/f ...

  8. linux查看日志文件内容命令tail、cat、tac、head、echo详解

    linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, ---------- ...

  9. Android-获取网络图片设置壁纸

    下载图片,设置壁纸 的代码: package liudeli.async; import android.app.Activity; import android.app.ProgressDialog ...

  10. [SIP01]SIP Header Fields里面各字段用途

    INVITE sip:bob@biloxi.com SIP/2.0 Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds Max-Forw ...