读书人

批改窗口风格SetWindowLong GetWindow

发布时间: 2013-11-02 19:41:10 作者: rapoo

修改窗口风格SetWindowLong GetWindowLong使用的疑惑

int boolFullScreen=0;
#define windowStyle WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX/*窗口模式风格*/
#define fullScreenStyle WS_POPUPWINDOW/*全屏风格*/


case WM_LBUTTONDBLCLK:/*双击*/
if(!boolFullScreen){
tmp=GetWindowLong(hwnd,GWL_STYLE);
tmp &=~fullScreenStyle;
tmp |=windowStyle;
SetWindowLong(hwnd,GWL_STYLE,tmp);/*设置全屏却用窗口风格*/
MoveWindow(hwnd,0,0,wScreen,hScreen,0);
boolFullScreen|=1;
}
case VK_ESCAPE:/**/
if(boolFullScreen){/*全屏才退出*/
tmp=GetWindowLong(hwnd,GWL_STYLE);
tmp &=~windowStyle;
tmp |=fullScreenStyle;/*倒着用了*/
SetWindowLong(hwnd,GWL_STYLE,tmp);/*窗口的风格却用全屏风格*/
MoveWindow(hwnd,xWind,yWind,wWind,hWind,0);
boolFullScreen&=0;}

上面的代码放在窗口框架中,
实现功能:
鼠标双击窗口客户区时,窗口变成WS_POPUPWINDOW风格并移动窗口并全屏显示。
按下ESC键时,窗口变回初始大小,正常窗口。


问题是窗口的风格设置上,要反过来设置才能达到预期效果。
不解啊 不解……。

[解决办法]
看看tmp
[解决办法]
,&,~用的是不是有问题
[解决办法]
tmp &=~fullScreenStyle这个设置是取消WS_POPUPWINDOW风格,即将WS_POPUPWINDOW对应位置0
注意这个是位与逻辑,和该位的0与

读书人网 >VC/MFC

热点推荐