一、前言
在之前对SimpleCG的介绍中,我们所有程序都在单个窗口内完成,通常这也是大多数程序的做法。尽管如此,多窗口在某些情形下也是非常需要的,这篇文章我们就来看看如何创建多个窗口并进行相关操作。
二、多窗口创建函数
//创建显示窗口
HWND CreateNewWindow(int nWidth, int nHeight);
指定需要创建的窗口宽度及高度,即可创建新的窗口,同时返回一个窗口的内部ID,称为窗口句柄。句柄的意思类似把手,通过它即可以控制窗口。
创建完的窗口是隐藏状态,我们需要显示窗口函数把它显示出来
BOOL ShowWindow( HWND hWnd, int nCmdShow);
例如以下代码创建一个窗口并显示出来。
HWND window=CreateNewWindow(600, 700);
ShowWindow(window, SW_SHOW);
三、显示内容到指定窗口
//设置当前绘画窗口
HWND setdrawingHWND(HWND hWnd);
通过该函数将指定绘制的目标窗口,所有的绘制函数(例如line、circle等函数)将绘制对象到该窗口。可以在多个窗口间用该函数切换绘制窗口,达到多窗口协作效果。
四、多窗口程序演示
#include "../import/include/SimpleCG.h"
#ifdef _DEBUG
#pragma comment(lib,"../import/lib/SimpleCG_MDd.lib")
#else
#pragma comment(lib,"../import/lib/SimpleCG_MD.lib")
#endif
HWND g_hWnd1 = NULL;
HWND g_hWnd2 = NULL;
LRESULT OnLButtonDown( HWND hWnd, WPARAM wParam, int nX, int nY )
{
POINT pt;
pt.x = nX;
pt.y = nY;
setdrawingHWND(g_hWnd1);
setlinecolor(RGB(0,0,255));
line(nX,nY,nX,nY);
setdrawingHWND(g_hWnd2);
setlinecolor(RGB(255,0,0));
line(nX,nY,nX,nY);
ReflushWindow();
return TRUE;
}
LRESULT OnMouseMove( HWND hWnd, WPARAM wParam, int nX, int nY )
{
POINT pt;
pt.x = nX;
pt.y = nY;
if( wParam & MK_LBUTTON )
{
setdrawingHWND(g_hWnd1);
lineto(nX,nY);
ReflushWindow();
setdrawingHWND(g_hWnd2);
lineto(nX,nY);
ReflushWindow();
}
return TRUE;
}
int _tmain(int argc, _TCHAR* argv[])
{
SetMouseProcess( enumINMSG_LBUTTONDOWN, OnLButtonDown);
SetMouseProcess( enumINMSG_MOUSEMOVE, OnMouseMove);
if( !InitApp(400, 400))
return 1;
g_hWnd1 = getdrawingHWND();
g_hWnd2 = CreateNewWindow(400, 400);
RunningApp();
ReleaseApp();
return 0;
}
程序开个窗口,在一个窗口鼠标绘制同时往两个窗口绘制不同颜色轨迹,
运行效果如图

本文围绕SimpleCG展开,此前程序多在单窗口完成,而某些情形下多窗口很有必要。文中介绍了多窗口创建函数,可指定宽高创建窗口并返回句柄,创建后需显示。还说明了显示内容到指定窗口的方法,能实现多窗口协作,最后进行了多窗口程序演示。
852

被折叠的 条评论
为什么被折叠?



