最简单的Windows窗口程序,使用main函数,隐藏控制台等,适合window编程入门

#include 
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) //隐藏控制台用,注掉后控制台和窗口一起出现

LRESULT WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);

int main()
{
	HINSTANCE hInstance = GetModuleHandle(NULL);//获取实例句柄
	WNDCLASSEX wc;
	MSG msg;
	HWND hwnd;

	//填充窗口属性
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc = WndProc;
	wc.cbClsExtra = wc.cbWndExtra = NULL;
	wc.hInstance = hInstance;
	wc.hbrBackground = (HBRUSH)GetStockObject(COLOR_WINDOW+1);
	wc.lpszMenuName = NULL;
	wc.lpszClassName = TEXT("MyWindow");
	wc.hIcon = wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION); 
	wc.hCursor = LoadCursor(NULL,IDC_ARROW); 

	RegisterClassEx(&wc);//注册窗口类

	hwnd = CreateWindowEx(NULL,
		wc.lpszClassName,
		wc.lpszClassName,
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		NULL,
		NULL,
		hInstance,
		NULL );//创建窗口

	ShowWindow(hwnd, SW_SHOW);//显示窗口
	UpdateWindow(hwnd);//更新窗口

	//进入消息循环
	while(true)
	{
		if(!GetMessage(&msg,0,0,0))break;
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;
}
//窗口过程回调函数,在这里处理窗口消息
LRESULT WINAPI WndProc( HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_DESTROY:
		PostQuitMessage(NULL);
		break;
	}
	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

vs2008 下面编译通过


比起自动创建的window窗口精简不少,而且是用新手熟悉的main函数。虽然是这么说,但是要理解这里面的过程,果然还是要看看windows编程相关基础才行。想我以前就是不理解什么叫回调,为什么窗口过程会“自己执行了”,感觉不按程序的套路来,呵呵。

其实什么回调不回调,不过是函数指针的知识罢了,注册的时候就把函数指针给了一个结构体,窗口程序在接受到窗口消息后调用了这个函数指针而已,没什么特别的,只是它是在windows内部完成的,看不到而已,如果自己写过DLL就会理解多一点。

你可能感兴趣的:(经验)