一,基本概念

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. 万能头文件#include<bits/stdc++.h>

    最近在打cf时赛后翻阅别人的代码总是会发现一个陌生而奇怪的头文件#include<bits/stdc++.h> 奇怪之处就在于基本上所有的代码只要用了这个头文件就不再写其他头文件了. 百度 ...

  2. oracle 创建一个用户,只能访问指定的对象

    1>创建一个ORACLE 的用户 create user username identified by pws; 2>给用户授权  grant connect,resource to us ...

  3. Xmind 常用快捷键列表(官方推荐)

    XMind中文版快捷键指南 XMind是一款非常实用的思维导图软件,能够帮助人们快速理清思路,打开新的局面.熟练地掌握快捷键的操作不光能够提供便捷,更能很大程度上的缩短制作时间,提高工作效率.本文总结 ...

  4. WindowServer2016无法安装.netframework3.5

    因为安装sql server的原因 需要安装.NET Framework3.5 报错内容如下: 原因分析 找不到安装源文件. 解决办法 可以通过如下 PowerShell 脚本进行安装: 从开始菜单中 ...

  5. Qcreator3.1.2调试器(windows)版本

    环境:visual studio 2012 qt:5.3.1 默认的ms版本qtcreator只能使用visual studio的编译器,不能使用调试工具.需要gdb或者cdb进行调试,这里介绍使用的 ...

  6. mongodb新建用户,

    1.用管理 员用户登录mongoDB use hzb_test db.createUser({user: "hzb",pwd: "hzb",roles: [{ ...

  7. CGLIB介绍与原理(通过继承的动态代理)

    一.什么是CGLIB? CGLIB是一个功能强大,高性能的代码生成包.它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充.通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接 ...

  8. Xshell 连接Linux虚拟机失败解决办法

    当我们在VMWare上安装好Ubuntu虚拟机后,有时候会需要使用多个terminal窗口,但是在虚拟机中多个窗口互相切换查看不方便,这时候用物理机的xshell工具连接到虚拟机中去就显得很方便.直接 ...

  9. nodejs版本升级

    网上都说   npm install –g n 可是一直不行,换做 npm install -g cnpm --registry=https://registry.npm.taobao.org ok

  10. SQL 语句常用函数

    一.字符转换函数 1.ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错. 2.CH ...