读书人

为什么小弟我的窗口重画时小弟我画的

发布时间: 2012-03-06 20:47:55 作者: rapoo

为什么我的窗口重画时,我画的图没有了,源文件不是播放了吗
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps;
HDC hdc;
static HDC hMetaDC=CreateMetaFile(NULL);
HMETAFILE hMetaFile;
int wmId ;
int wmEvent;
switch(uMsg)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
{
switch(wmId)
{
case ID_LINE:
dk=1;
break;
case ID_CIRCLE:
dk=2;
break;
case ID_RANT:
dk=3;
break;
default:
dk=-1;
}
}
break;
case WM_PAINT:
hdc=::BeginPaint(hwnd,&ps);
hMetaFile=CloseMetaFile(hMetaDC);
PlayMetaFile(hdc,hMetaFile);
DeleteMetaFile(hMetaFile);
hMetaDC=::CreateMetaFile(NULL);
::EndPaint(hwnd,&ps);
break;
case WM_DESTROY:
DestroyWindow(hwnd);
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN:
switch(dk)
{
case -1:
break;
case 1:
case 2:
case 3:
p1.x=LOWORD(lParam);
p1.y=HIWORD(lParam);
break;
}
case WM_LBUTTONUP:
switch(dk)
{
case -1:
break;
case 1:
p2.x = LOWORD(lParam);
p2.y = HIWORD(lParam);
hdc=GetDC(hwnd);
MoveToEx(hdc,p1.x,p1.y, (LPPOINT) NULL);
LineTo(hdc,p2.x,p2.y);
MoveToEx(hMetaDC,p1.x,p1.y, (LPPOINT) NULL);
LineTo(hMetaDC,p2.x,p2.y);
break;
case 2:
p2.x = LOWORD(lParam);
p2.y = HIWORD(lParam);
hdc=GetDC(hwnd);
Ellipse(hdc,p1.x,p1.y,p2.x,p2.y);
Ellipse(hMetaDC,p1.x,p1.y,p2.x,p2.y);
break;
case 3:
p2.x = LOWORD(lParam);
p2.y = HIWORD(lParam);
hdc=GetDC(hwnd);
Rectangle(hdc,p1.x,p1.y,p2.x,p2.y);
Rectangle(hMetaDC,p1.x,p1.y,p2.x,p2.y);
break;
}
default:
return ::DefWindowProc(hwnd,uMsg,wParam,lParam);

}
}

[解决办法]
没太明白
[解决办法]
画图的部分应该放在wm_paint里面去。

读书人网 >C++

热点推荐