我记得第一个笔记就是win的 当时想写脚本,所以搞了个鼠标移动啥,当时啥也不懂,直接莽上去的,本着能用就行的心态,这次是准备好好学习一下,想写个程序。
microsoft的帮助:MSDN,我告诉你
API
应用程序接口,
某个系统或某个设备提供给某种应用程序对其进行编程操作的函数,类,组件等的集合,就称作该系统的API
(就是个工具,知道怎么调用就好,技术细节看开发者愿不愿意告诉你)
win运行的方式
(决定你要如何思考)
不同于传统的DOS的程序方法,win是一种事件驱动的程序模式,主要基于消息。
当用户需要完成某个功能时会调用操作系统的支持,操作系统会将需要包装成消息,投递到消息队列中,应用程序会从消息队列取走消息并响应。
(个人感觉这是 分离了操作和程序间的直接联系)
消息与消息队列
先说明操作系统与应用程序的关系
操作系统(神经)感知事件并发送消息
应用程序(大脑)接收消息并决定要干什么
(神经,可以感知事件但无法做出相应;大脑可以相应。理解就好)
*消息机制(Message)
MSG结构体
typedef struct tagMSG { // msg
HWND hwnd;
/*代表所属的窗口*/
UINT message;
/*消息代号。
原本是数字,由于不便于记忆,已经定义为宏了(WM_XXXX)*/
WPARAM wParam;
LPARAM lParam;
/*上面两是对于消息的补充
例如:message表示从键盘收到了字符
这俩就是说收到了啥的*/
DWORD time;/*时间*/
POINT pt;/*鼠标位置*/
} MSG;
消息队列(Queue)
每个win程序都有一个消息队列,先进先出的缓冲区,通常是数组
程序取出消息然后响应
句柄
句柄就是一种标识号,标识了如图标,光标,窗口,应用程序的实例(已加载到内存运行中的程序)等等,任何资源。
图标句柄(HICON),光标句柄(HCURSOR),窗口句柄(HWND),应用程序实例句柄(HINSTANCE)等等各种类型的句柄。
每个窗口的唯一标识号就是窗口句柄。
WinMain
与以前写的main()函数作用一致(入口点)。
程序的四个大致步骤:
1. WinMain函数的定义;
2. 创建一个窗口;
3. 进行消息循环;
4. 完成回调函数;
该函数接受四个参数,这些参数都是系统调用WinMain函数时,传递给应用程序的。
int WINAPI WinMain(
HINSTANCE hInstance,
/*当前实例的句柄(操作系统给的)*/
HINSTANCE hPrevInstance,
/*是否是长子
例:当前程序只有一份实例可以运行时写入
if(hPrevInstance)return 0;
(假定NULL==0成立)*/
LPSTR lpCmdLine,
/*
使用命令行时传递参数时用的
一个字符串
含有传递给应用程序的参数串
不包含应用程序名本身
传递时直接复制(不会对特殊字符进行操作)
如有疑问,看下面的超链接
*/
int nCmdShow
/*一个将要传递给 ShowWindow()的整数
指定的程序的窗口应该如何显示,如最大化,最小化,隐藏等*/
);
先这些了剩下的下次写。
资料:Windows程序内部运行原理