Windows——API入门
程序员文章站
2024-03-19 08:11:58
...
学习目标:
1. 了解 windows操作系统应用程序开发的基本概念,win32 API函数、消息与事件驱动
2. 掌握WinMain函数的基本框架,窗口定义、窗口创建、消息循环及窗口过程函数
参考书目:
《Windows程序设计》(charle petzold著)、《深入浅出MFC》(侯俊杰著)、《VC++深入讲解》(孙鑫编著)
学习目的
写第一个基于windows API 的基于窗体、消息循环、事件驱动的 Windows C语言风格的Windows 程序。
代码
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//回调函数;
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_LBUTTONDOWN:
MessageBox(hwnd, TEXT("请不要随意点击!"), TEXT("鼠标左键按下"), MB_OK);
break;
case WM_PAINT:
HDC adc;
PAINTSTRUCT ps;
adc = BeginPaint(hwnd, &ps);
TextOut(adc, 20, 20, L"Windows API_test 网络编程", 21);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wndclass;//窗口类;
MSG msg;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = L"Window窗口创建"; //窗口类名称
if (!RegisterClass(&wndclass))//注册窗口;
{
MessageBox(NULL, L"创建失败", L"error", MB_OK);
return 0;
}
HWND hwnd = CreateWindow( //创建窗口,返回句柄;
L"Window窗口创建", //1.窗口类名称
L"window窗口创建", //2.窗口标题
WS_OVERLAPPEDWINDOW, //3.窗口风格
CW_USEDEFAULT, //4.窗口左上角相对于屏幕左上角的初始x坐标
CW_USEDEFAULT, //5.窗口左上角相对于屏幕左上角的初始y坐标
CW_USEDEFAULT, //6.窗口宽度
CW_USEDEFAULT, //7.窗口高度
NULL, //8.一个子窗口的父窗口的句柄,或隶属窗口的拥有者窗口的句柄,若没有拥有者窗口或者父窗口,置为NULL;
NULL, //9.选单句柄
hInstance, //10.创建窗口对象的应用程序的实例句柄
NULL //11.创建窗口的额外参数
);
ShowWindow(hwnd, nCmdShow);//显示窗口;
UpdateWindow(hwnd);//更新窗口;
while (GetMessage(&msg, NULL, 0, 0)) //消息循环;
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
总结
提示:
- 用VS进行编译的时候,需要改变project属性
否则会报错