確定窗口實際用戶區的一些問題

1.RECT的兩個座標屬性不同於索引

一個左上角在0,0點,寬度爲400,長度爲300的窗口,他的RECT就是{0,0,400,300},而不是{0,0,399,299},因爲x軸上從0到399的寬度是399而不是400。

爲什麼說這個問題呢,因爲在你將任何RECT結構發送給大多數DirectDraw函數時,他一般包含左上角,但不包含右下角。這是兩個獨立的問題,但在同一場景下使用,容易造成概念混亂。

 

2.窗口調整爲正確的用戶區

如果你希望的用戶區是400*300,但是使用CreateWindowEx創建的400,300的窗口中,不光含有用戶區,還有標題欄,菜單,邊框等等,所以需要在創建完窗口後,再調整窗口的大小,使用戶區達到預期。

下面的代碼假定希望窗口左上角在0,0處,在左上角不變的情況下,將窗口調整爲用戶區大小爲SCREEN_WIDTH*SCREEN_HEIGHT。

 

3.當窗口被用戶移動後,仍然能夠定位正確的用戶區

在上面,我們計算了窗口的左右下邊框(這裏只考慮了最簡單的情況以便說明,當窗口有更多控件時應適當修改算法)。

border = -window_rect.left;
title = -window_rect.top;

有了這些數據,就可以在窗口移動後,仍然定位用戶區,下面的代碼都定位了user_rect,並在主表面上執行Blt:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章