您的位置:首页 > 其它

动手写第一个windows程序 新建一个窗口

2015-07-14 21:25 423 查看
主要熟悉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++深入详解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: