case VIDEO:
while(Bianliang==1){
//if (!bPhotoFileOpen){
strcpy(photoFile, "D://x.bmp");
capDriverConnect(hwndPhoto, 0); // 与驱动连接
capPreviewScale(hwndVideo, TRUE); // 使图像延伸到所设定的视窗大小
capPreviewRate(hwndVideo, 1); // 每秒图像变化张数
capPreview(hwndVideo, TRUE); // 预览图像显示
capEditCopy(hwndVideo);
if (capFileSaveDIB(hwndVideo, photoFile)){
//hwndPhoto=capCreateCaptureWindow((LPSTR) "Save Bmp File Succeeded!", WS_CHILD | WS_VISIBLE,0, 0, 640, 480,(HWND) hWnd,(int)1);
}
hWinDC=GetDC(hWnd);
ReadBmpFile("D://x.bmp",Image);
SkindetectionHSV(Image, SkinImage, ImageWidth, ImageHeight);
drawkuang(Image, SkinImage,ImageWidth, ImageHeight,0,0);
while(exit==1){
Bianliang=0;
DestroyWindow(hWnd);
break;
}
}
break;
Bianliang的值在17行的while循环中有修改,但是 exit这个变量的值再哪里修改的呢,如果这个变量的值不修改,17行的whilie循环就是死循环了,内外层while循环也就无法结束。
不建议在事件响应函数中进行死循环操作,这样会导致当前线程的处理程序一直占用CPU,也就无法相应其它按钮的操作。如果是绘图操作,应该有鼠标按下和释放的响应函数才对啊。
正常的操作应该是:
在vedio按钮按下后,把Bianliang的状态置1,在鼠标按下时,响应鼠标按下事件,根据Bianliang的状态进行绘制,也就是while(Bianliang)中的内容,但是不需要用while循环,绘制由鼠标事件触法。
点击exit按钮后,更改Bianliang的值为0即可,这样就不会导致死循环了。
你应该在点击exit的时候Bianliang改为0,
//这两行放exit的点击监听里面
Bianliang=0;
DestroyWindow(hWnd);