HelloWin

#include<Windows.h>
#pragma comment(lib,"winmm")
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
/*szCmdLine 中sz表示“以零结束的字符串”
iCmdShow 中i表示“整型”
*/
{
	static TCHAR szAppName[] = TEXT("HelloWin");
	HWND		hwnd;				
	MSG			msg;			//消息结构
	WNDCLASS	wndclass;		//窗口类结构
	/*
	typedef struct tagWNDCLASSA {
	UINT      style;				类风格
	WNDPROC   lpfnWndProc;			
	int       cbClsExtra;
	int       cbWndExtra;
	HINSTANCE hInstance;
	HICON     hIcon;
	HCURSOR   hCursor;
	HBRUSH    hbrBackground;
	LPCSTR    lpszMenuName;
	LPCSTR    lpszClassName;
	} WNDCLASSA, *PWNDCLASSA, *NPWNDCLASSA, *LPWNDCLASSA;
	*/
	

	wndclass.style = CS_HREDRAW | CS_VREDRAW;
	wndclass.lpfnWndProc = WndProc;
	//下面两行用于在类结构和Windows内部维护的窗口结构中预留一些额外的空间
	//应用程序可以按照需求来使用这些额外的空间
	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;		//表示应用程序的实力句柄
	wndclass.hInstance = hInstance;
	//下面这行为所以基于该窗口类的窗口设定一个图标
	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //LoadIcon:加载图标,以供程序使用
	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);		//LoadCursor  加载鼠标光标,以供程序使用
	wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);		//获取一个图形形象,
	wndclass.lpszMenuName = NULL;
	wndclass.lpszClassName = szAppName;

	if (!RegisterClass(&wndclass))		//RegisterClass 为应用程序注册一个窗口类
	{	
		MessageBox(NULL, TEXT("This program requires Windows NT!"), szAppName, MB_ICONERROR);
		//MessageBox:显示消息框
		return 0;
	}
	//基于窗口类创建一个窗口
	hwnd = CreateWindow(szAppName,						//窗口类名称
						TEXT("The Hello Program"),		//窗口标题
						WS_OVERLAPPEDWINDOW,			//窗口风格   
						CW_USEDEFAULT,					//最初的x位置
						CW_USEDEFAULT,					//最初的y位置
						CW_USEDEFAULT,					//初始x方向尺寸
						CW_USEDEFAULT,					//初始y方向尺寸
						NULL,							//父窗口句柄
						NULL,							//窗口菜单句柄
						hInstance,						//程序实例句柄
						NULL);							//创建参数


	ShowWindow(hwnd, iCmdShow);		//ShowWindow在屏幕中显示窗口
	UpdateWindow(hwnd);				//UpdateWindow指示窗口对其自身重绘

	while (GetMessage(&msg, NULL, 0, 0))		//GetMessage从消息队列获取消息
	{
		TranslateMessage(&msg);		//TranslateMessage翻译一些键盘消息
		DispatchMessage(&msg);		//DispatchMessage将消息发送给窗口过程
	}
	/*
	typedef struct tagMSG {
	HWND   hwnd;				消息所指向的窗口的句柄
	UINT   message;				消息标识符
	WPARAM wParam;				一个32位的消息参数
	LPARAM lParam;				一个32位的消息参数
	DWORD  time;				消息进入队列的时间
	POINT  pt;					消息进入消息队列中时鼠标指针的位置坐标
	DWORD  lPrivate;
	} MSG, *PMSG, *NPMSG, *LPMSG;
	*/
	return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)//由Windows自身调用
{
	HDC		hdc;
	PAINTSTRUCT ps;			//绘制结构
	RECT	rect;			//矩形结构

	switch (message)
	{
	case WM_CREATE:
		//PlaySound播放声音文件
		PlaySound(TEXT("hellowin.mav"), NULL, SND_FILENAME | SND_ASYNC);
		return 0;
		
	//当窗口的客户区的部分或全部“无效”且必须“更新”时,应用程序将得到此通知
	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);	//BeginPaint表明绘制开始

		GetClientRect(hwnd, &rect);		//GetClientRect获取窗口客户区的尺寸

		//DrawText 显示一个文本字符串
		DrawText(hdc, TEXT("Hello Windows 98!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

		EndPaint(hwnd, &ps);	//EndPaint结束窗口绘制
		return 0;

	case WM_DESTROY:
		PostQuitMessage(0);		//PostQuitMessage 将“退出”消息插入消息队列
		return 0;
	}
	//所有窗口过程不进行处理的消息都必须传给名称为DefWindowProc的window函数,
	//DefWindowProc的返回值必须从窗口过程返回,若不处理,其它的正常行为无法进行
	return DefWindowProc(hwnd, message, wParam, lParam);	//DefWindowProc执行默认的消息处理
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值