创建工作窗口

//创建内部工作窗口, 创建失败 ret == NULL, 否则是有效的窗口句柄
//asz_name 窗口类名称 WndProc 窗口过程 asz_wnd_name 窗口名称
//APP关闭时, 需要调用 DestroyWindow() 关闭窗口 
inline HWND TfxWorkWindow(const char* asz_name,
						  WNDPROC  WndProc, const char* asz_wnd_name = NULL );     

//创建内部工作窗口, 创建失败 ret == NULL, 否则是有效的窗口句柄
//asz_name 窗口类名称 WndProc 窗口过程 asz_wnd_name 窗口名称
//APP关闭时, 需要调用 DestroyWindow() 关闭窗口 
HWND TfxWorkWindow(const char* asz_name,
				   WNDPROC  WndProc, const char* asz_wnd_name)
{
	HWND		hWnd=NULL;
	WNDCLASSEX	wcex={0};

	//获得当前应用程序的句柄
	HINSTANCE	hInstance = GetModuleHandle(NULL);
	if ( hInstance == NULL ) return NULL;

	wcex.cbSize = sizeof(WNDCLASSEX); 

	//设置回调函数
	wcex.lpfnWndProc	= (WNDPROC)WndProc;	
	wcex.style			= CS_HREDRAW | CS_VREDRAW;
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszClassName	= asz_name;

	WNDCLASS wndclass={0}; 
	if ( GetClassInfo(hInstance, asz_name, &wndclass) == NULL ) 
		if ( RegisterClassEx(&wcex) == NULL ) return (NULL);

	if (  ( asz_wnd_name == NULL ) || (  strcmp(asz_wnd_name, "" ) == 0 ) )
		hWnd = CreateWindow(asz_name, "", WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
	else
		hWnd = CreateWindow(asz_name, asz_wnd_name, WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

	return hWnd;
}

  

原文地址:https://www.cnblogs.com/jlyg/p/10155567.html