关于windows消息机制的问题
我的确不太懂windows的消息机制,我还想问一个问题应该是和消息机制相关的,我在消息循环里面写了一个页面刷新的函数refresh()
while(1)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message==WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
refresh();
}
}
return msg.wParam;
}
然后在回调函数里面的空格事件里面写了一个裁减图片的函数blt,
case VK_SPACE:
drawp.blt(drawp.x1,drawp.y1,drawp.x2,drawp.y2);
return 0;
然后我运行程序时单击空格按钮执行了裁减程序后,是不是又回到消息循环里面刷新页面去了,我想显示裁减的图片,即中止循环函数,有没有可能,请问你怎么样才能实现,希望你能给我一个解答!
还有一点需要说明的是refresh()函数
void refresh()
{
MakeRect(0,0,640,480);
lpDDSBuffer->BltFast(0,0,lpDDSMap,&r,NoKey);
POINT curpos;
GetCursorPos(&curpos);
for (int i=0;i<2;i++)
{
CursorX[i]=CursorX[i+1];
CursorY[i]=CursorY[i+1];
CursorX[2]=curpos.x;
CursorY[2]=curpos.y;
lpDDSBuffer->BltFast(CursorX[1],CursorY[1],lpDDSMouse,NULL,SrcKey);
}
Flip();
}
如果我把第一和第二句注视掉那么就能够一按空格就显示出我裁减的图片,不过屏幕上鼠标所有滑过的痕迹都会显示,如果我不注视掉,鼠标滑过的痕迹就不会显示,不过就会出现我前面提到过的问题,不能显示裁减的部分!
裁减函数我是这样写的:void draw::blt(int x1,int y1,int x2,int y2)
{
HDC hdc;
x1=drawp.x1;
y2=drawp.y1;
x2=drawp.x2;
y2=drawp.y2;
MakeRect(x1,y1,x2,y2);
lpDDSBuffer->BltFast(0,0,lpDDSMap,&r,SrcKey);
}