今天2016-07-23 13:26:24又來處理最大化時,視窗工作列隱藏的bug。
前面已經用了
minmaxinfo的結構體:typedef
struct
minmaxinfo;
這裡的方法,感覺缺什麼,有些變數不知道。也知道怎麼去處理ongetminmaxinfo()訊息函式了。
void maindialog::ongetminmaxinfo(minmaxinfo far*lpmmi)
這樣的效果,豎放的時候不好,將視窗的大小是確定了,但是左上角的座標不對!
然後學習了,確定工作列大小的方法,以為真的要分情況,討論視窗的大小了。
獲得桌面工作區大小,即不包括工作列的大小,製作視窗全屏時經常用到,方法如下:
rect rt;systemparametersinfo(spi_getworkarea,
0,(pvoid)&rt,0);
crect rect;
::getwindowrect(::findwindow(_t("shell_traywnd"), null), &rect); //獲取工作列的大小
獲得工作列高度與寬度方法有二:
1.判斷位置
rect rt;
systemparametersinfo(spi_getworkarea,
0, &rt, 0) //
獲得工作區大小
//工作列在下面的高度
int y = ::getsystemmetrics(sm_cyscreen)-rt.height();
int y = rt.top; //
上面
int y = rt.left; //
左 int y = ::getsystemmetrics(sm_cxscreen)-rt.width(); //
右
2.得到高度,然後可判斷位置
crect rect;
cwnd *pwndprev= findwindow("
shell_traywnd
", ""); //
呼叫本物件即this的findwindow函式,返回視窗指標
pwndprev->getwindowrect(&rect);
//rect.bottom-rect.top 就是工作列的高度
if(rect.top>0) //
下面if(rect.left>0) //
左面 或者
cwnd* p =null ;
hwnd hwnd = ::findwindow("
shell_traywnd
",null) ; //
呼叫公有的findwindow函式,返回視窗控制代碼
if(hwnd)
p->getwindowrect();//
包含有寬度
最後突然想帶了既然systemparametersinfo(spi_getworkarea, 0, &rt, 0);都獲得了工作窗體的大小,就直接 movewindow(rt);就可以了,實事證明是可行了。只不過移動後返回還是有bug;不過可以接受了。
再次證明有時候,不能只是套別人的方法,自己還是要動動腦,用自己的方法去實現。要相信自己,有的想法是行得通的。
C Winform 最大化後 工作列還顯示解決
去掉標題欄 1.this.formborderstyle formborderstyle.none 不會顯示窗體標題欄等相關 最大化 2.this.windowstate formwindowstate.maximized 窗體最大化時 非全屏 不會遮蓋工作列 設定順序 先 1 後 2 放在 for...
WPF自定義視窗最大化顯示工作列
當我們要自定義wpf視窗樣式時,通常是採用設計視窗的屬性 windowstyle none 然後為視窗自定義放大,縮小,關閉按鈕的樣式。然而這樣的話,當通過 設定視窗 如下 放大時,視窗會把工作列給遮檔住。private void max click object sender,routedeven...
WPF自定義視窗最大化顯示工作列
原文 wpf自定義視窗最大化顯示工作列 當我們要自定義wpf視窗樣式時,通常是採用設計視窗的屬性 windowstyle none 然後為視窗自定義放大,縮小,關閉按鈕的樣式。然而這樣的話,當通過 設定視窗 如下 放大時,視窗會把工作列給遮檔住。private void max click obje...