MFC最大化顯示工作列

2021-09-09 02:01:05 字數 1796 閱讀 4993

今天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...