主要熟悉windows窗口的一些窗口类,显示等,比较简单,注释比较详细了;
#include<Windows.h>
#include<stdio.h>
// 函数声明
LRESULT CALLBACK WinCipher(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
//主函数
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
/*
typedef struct _WNDCLASS {
UINT style; //窗口的类型
WNDPROC lpfnWndProc; //窗口过程函数指针(回调函数)
int cbClsExtra; //窗口类附加字节,为该类窗口所共享。通常0。
int cbWndExtra; //窗口附加字节。通常设为0。
HANDLE hInstance; //当前应用程序事例句柄。
HICON hIcon; //图标句柄 LoadIcon();
HCURSOR hCursor; //光标句柄 LoadCursor();
HBRUSH hbrBackground; //画刷句柄 (HBRUSH)GetStockObject();
LPCTSTR lpszMenuName; //菜单名字
LPCTSTR lpszClassName; //类的名字
} WNDCLASS;
*/
//设计一个窗口类
WNDCLASS wndcls;
wndcls.cbClsExtra = 0;
wndcls.cbWndExtra = 0;
wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);// 画刷句柄
wndcls.hCursor = LoadCursor(NULL, IDC_CROSS); //光标句柄
wndcls.hIcon = LoadIcon(NULL, IDI_ERROR); //图标句柄
wndcls.hInstance = hInstance; //当前应用程序事例句柄
wndcls.lpfnWndProc = WinCipher; //窗口过程函数指针(回调函数)
wndcls.lpszClassName = "cipher";//类的名字
wndcls.lpszMenuName = NULL;//菜单名字
wndcls.style = CS_HREDRAW | CS_VREDRAW;//窗口的类型
RegisterClass(&wndcls);
//创建窗口,定义一个变量用来保存成功创建窗口后返回的句柄
HWND hwnd;
hwnd = CreateWindow("cipher", "程序员之家", WS_OVERLAPPEDWINDOW,0, 0, 600, 400, NULL, NULL, hInstance, NULL);
//CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
//显示及刷新窗口
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
//定义消息结构体,开始消息循环
MSG msg;
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg); //进行消息(如键盘消息)转换
DispatchMessage(&msg);//分派消息到窗口的回调函数处理,(OS调用窗口回调函数进行处理)。
}
return msg.wParam;
}
//编写窗口过程函数 函数定义
LRESULT CALLBACK WinCipher(
HWND hwnd,//窗口句柄
UINT uMsg,//消息代码
WPARAM wParam,//两个参数
LPARAM lParam
)
{
switch (uMsg)
{
case WM_CHAR://用户在窗口按下字符键 通过translateMessage得到,messageBOx弹出一个消息框
char szChar[30];
sprintf_s(szChar, "你按下的字符是: %c", wParam);
MessageBox(hwnd, szChar, "提示", 0);
break;
case WM_LBUTTONDOWN ://用户点击左键
MessageBox(hwnd, "你的鼠标点击了左键", "提示", 0);
HDC hdc;
hdc = GetDC(hwnd);//使用DC操作图形
TextOut(hdc, 0, 30,"小人物点击了鼠标左键,真棒", strlen("小人物点击了鼠标左键,真棒"));//在窗口中0,30处显示一段代码
break;
case WM_RBUTTONDOWN:
MessageBox(hwnd, "你的鼠标点击了右键", "提示", 0);
HDC hdc2;
hdc2 = GetDC(hwnd);//使用DC操作图形
TextOut(hdc2, 0, 50, "小人物点击了鼠标右键,真棒", strlen("小人物点击了鼠标右键,真棒"));//在窗口中0,50处显示一段代码
break;
case WM_PAINT ://当窗口从无到有,改变尺寸,最小化恢复,遮盖再显示,发送该消息,通知重绘
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hwnd,&ps);
TextOut(hDC, 0, 0, "窗口新建了或者刷新了", strlen("窗口新建了或者刷新了"));
EndPaint(hwnd, &ps);
break;
case WM_CLOSE://点击了关闭按钮
HDC hdc3;
hdc3 = GetDC(hwnd);
TextOut(hdc3, 0, 70, "小人物点击了关闭按钮,确认关闭?", strlen("小人物点击了关闭按钮,确认关闭?"));
if (IDYES==MessageBox(hwnd,"是否真的关闭窗口?","message",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);//向应用程序消息队列投递一个WM_QUIT消息
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);//调用默认的窗口过程
}
return 0;
}
主要参考书籍:VC++深入详解