VC++深入详解第一天

1,API与SDK
API应有程序接口
SDK软件开发包
2,句柄
在windows程序中,有各种各样的资源(窗口,图标,光标等),系统在创建这些资源时会为他们分配内存,并返回标识这些资源的标识号,即句柄。
句柄可以理解为指针的指针。
https://blog.csdn.net/perfectguyipeng/article/details/71189822
3,消息

typedef struct tagMSG {
    HWND        hwnd;//窗口句柄
    UINT        message;//消息类型
    WPARAM      wParam;//消息附加参数
    LPARAM      lParam;
    DWORD       time;//消息产生时间
    POINT       pt;//消息产生的坐标位置
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;

进队消息和不进队消息
进队消息是4中window消息处理机制的方式的消息。PostMessage发送进队消息。进队消息一般是人操作产生的消息,例如:敲击键盘
不进队消息是操作系统直接给窗口发送消息,直接进行窗口过程函数。SendMessage发送不进队消息。不进队消息一般自动产生的消息,例如调用CreateWindow产生的WM_CREATE。ShowWindow产生的WM_SIZE和WM_SHOWWINDOW。
https://blog.csdn.net/booming163/article/details/79437107
4,window消息处理机制
在这里插入图片描述
(1)操作系统接收到应用程序的窗口消息,将消息投递到消息队列(消息产生进入消息队列)
(2)从消息队列中取出消息,对消息进行预处理(放弃某个消息的响应或调用translateMessage产生新的消息)(消息转换或忽略)
(3)程序调用DispatchMessage,将消息传递给操作系统。
(4)系统给应用程序窗口发送消息,进行窗口过程函数。

5,WinMain函数

int WINAPI WinMain(
  HINSTANCE hInstance,//当前应用程序的句柄
  HINSTANCE hPrevInstance,//当前实例前一个实例的句柄
  LPSTR     lpCmdLine,//传递给应用程序的行参数
  int       nShowCmd//窗口的显示方式(最大,最小)
);

6,创建窗口
1,设计一个窗口

typedef struct tagWNDCLASS {
    UINT        style;
    WNDPROC     lpfnWndProc;//窗口过程函数指针
    int         cbClsExtra;
    int         cbWndExtra;
    HINSTANCE   hInstance;//当前应用程序句柄
    HICON       hIcon;//窗口图标句柄
    HCURSOR     hCursor;//光标句柄
    HBRUSH      hbrBackground;
    LPCWSTR     lpszMenuName;
    LPCWSTR     lpszClassName;
} WNDCLASS, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;

2,注册窗口类
ATOM RegisterClass(
const WNDCLASS *lpWndClass//设计的窗口结构体
);
3,创建窗口

HWND CreateWindowExA(
  DWORD     dwExStyle,
  LPCSTR    lpClassName,
  LPCSTR    lpWindowName,
  DWORD     dwStyle,
  int       X,
  int       Y,
  int       nWidth,
  int       nHeight,
  HWND      hWndParent,
  HMENU     hMenu,
  HINSTANCE hInstance,
  LPVOID    lpParam
);

4,显示及更新窗口

BOOL ShowWindow(
  HWND hWnd,
  int  nCmdShow//显示方式
);
BOOL UpdateWindow(
  HWND hWnd
);

5,消息循环

	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

7,创建窗口demo

#include<Windows.h>
#include<stdio.h>
//窗口过程函数(回调函数)
LRESULT CALLBACK winSunProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParaw)
{
	switch (uMsg)
	{
	case WM_CHAR:
		printf("nihao");
		break;
	case WM_PAINT:
		HDC hdc;
		PAINTSTRUCT ps;
		hdc = BeginPaint(hWnd, &ps);
		TextOut(hdc, 0, 0, "http", strlen("http"));
		EndPaint(hWnd, &ps);
		break;
	default:
		return DefWindowProc(hWnd, uMsg, wParam, lParaw);

	}
	return 0;
	
}
// 主函数
int WINAPI WinMain(HINSTANCE hInstance,//当前应用程序的句柄
	HINSTANCE hPrevInstance,//当前实例前一个实例的句柄
	LPSTR     lpCmdLine,//传递给应用程序的行参数
	int       nShowCmd)//窗口的显示方式(最大,最小)
{
	//设计窗口结构体
	WNDCLASS wndClass;
	wndClass.style = CS_VREDRAW;
	wndClass.lpfnWndProc = winSunProc;   //窗口回调函数指针
	wndClass.cbClsExtra = 0;
	wndClass.cbWndExtra = 0;
	wndClass.hInstance = hInstance;      //应用程序句柄
	wndClass.hIcon = LoadIcon(NULL,IDI_ERROR);
	wndClass.hCursor = LoadCursor(NULL,IDC_CROSS);
	wndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
	wndClass.lpszClassName = "123";      //窗口类名传递的创建窗口的类名
	wndClass.lpszMenuName = "456";
	//注册窗口
	RegisterClass(&wndClass);
	HWND hWnd;
	//创建窗口
	hWnd = CreateWindow("123","",WS_OVERLAPPEDWINDOW, 0, 0, 400, 400, NULL, NULL, hInstance, NULL);
	//显示和更新窗口
	ShowWindow(hWnd, SW_SHOWNORMAL);
	UpdateWindow(hWnd);
	//消息循环
	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值