視窗的無效區域 演示程式 (轉)
視窗的無效區域
作者: 姜學哲(tosail0@163.net">netsail0@163.net)
教材: 設計(第五版)北京大學出版社
[美]Charles Petzold 著
北京博彥科技發展有限公司 譯 ¥:160
環境: Pro sp4 + Internet Explorer 6.0 sp1 + Visual C++ 6.0
圖們江程式編制小組()版權所有,轉載請說明出處
----------------------------------------------------------------
當視窗客戶區的一部分或者全部變為“無效”,以致於必須重新整理時,將給視窗過程傳送WM_PAINT訊息。
收到WM_PAINT訊息後必須繪製客戶區。在很多時候我們只需要很小的一個區域就可以了。當對話方塊覆蓋了部分客戶區的時候情況就是如此。關閉對話方塊後,需要重畫的只是先前被對話方塊遮住的矩形區域。這個區域就是“無效區域”或“更新區域”。
為了讓你更好地理解什麼是無效區域,我寫了一個程式。該程式的功能是獲取最新的無效區域的座標。執行該程式後你可以用另一個較小的視窗遮住該視窗的全部或一小部分。然後再移走。又或者改變視窗的尺寸。客戶區出現的四個數就是最新的無效區域座標。以下是WndProc部分的程式碼:
===========================================================
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxChar, cxCaps, cyChar ;
HDC hdc ;
static int t[4] ;
int i ;
PAINTSTRUCT ps ;
TCHAR szBuffer [10] ;
switch (message)
{
case WM_PAINT :
hdc = BeginPaint (hwnd, &ps) ;
t[0] = ps.rcPaint.left ;
t[1] = ps.rcPaint.top ;
t[2] = ps.rcPaint.bottom ;
t[3] = ps.rcPaint.right ;
for (i = 0 ; i < 4 ; i++)
{
TextOut (hdc, t[0], t[1] + i * 20, szBuffer,
wsprintf (szBuffer, TEXT ("%5d"), t[i])) ;
}
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
===========================================================
BeginPaint除了獲取裝置描述表控制程式碼之外,還從系統中獲取相關資訊填充她的第二個引數,也就是PAINTSTRUCT結構。該結構包含了一個rcPaint結構。而rcPaint結構就是最新無效區域的座標。
確定無效區域的時候不需要程式設計師干預,是由系統自動完成的。是暗箱操作。我們只需要用BeginPaint函式獲取就可以了。我對的這種隱藏細節的做法很不滿。也僅限於不滿。人在屋簷下,不得不低頭。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998122/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 小米 TYPE_TOAST 懸浮窗無效的原因AST
- 關於父視窗獲取跨域iframe子視窗中的元素跨域
- 視窗程式的框架框架
- Arch-gnome下網頁只能新建視窗開啟,滾輪無效的解決方案網頁
- 視窗程式框架框架
- Windows API視窗程式設計 - 空白視窗WindowsAPI程式設計
- qt的無邊框視窗支援拖拽、Aero Snap、視窗陰影等特性QT
- 工作列視窗以及其子視窗結構 (轉)
- JavaScript視窗功能指南之操縱視窗 (轉)JavaScript
- 廣告彈窗/小視窗程式碼
- 建立多視窗的Windowsform程式WindowsORM
- 完成無線區域網路搭建構架的六要素(轉)
- Windows SDK程式設計之一 視窗示例程式 (轉)Windows程式設計
- win32 單例項程式執行-無視窗程式也可Win32單例
- 元件無線區域網元件
- JavaScript視窗功能指南之命名視窗和框架 (轉)JavaScript框架
- JavaScript視窗功能指南之定製新視窗 (轉)JavaScript
- JavaScript視窗功能指南之發揮視窗特徵 (轉)JavaScript特徵
- JavaScript視窗功能指南之建立彈出視窗 (轉)JavaScript
- C# winForm 視窗跳轉後關閉上一個視窗的方法C#ORM
- JS版常見問題(二)相容版本的無提示關閉視窗! (轉)JS
- jQuery獲取瀏覽器視窗和文件視窗的高度程式碼jQuery瀏覽器
- 零程式碼儲存視窗執行狀態 (轉)
- 關於視窗的操作詳談 (轉)
- 彈出視窗程式碼
- 子視窗控制元件(轉)控制元件
- Linux 文件與視窗(轉)Linux
- JavaScript視窗功能指南之在視窗中書寫內容 (轉)JavaScript
- 視窗程式框架示例程式碼框架
- ArcEngine地圖視窗指定區域匯出指定DPI多格式---delphi/C#實現地圖C#
- 新一代無線區域網 Mesh接入技術(轉)
- win32的建立視窗程式碼Win32
- JAVA 程式 在 cmd 視窗的執行Java
- 使用DLL檔案中封裝的視窗 (轉)封裝
- plsql的命令(command)視窗與sql視窗有什麼區別20170620SQL
- JavaScript視窗功能指南之檢查一個視窗是否存在 (轉)JavaScript
- Oracle 無效的月份Oracle
- SWT的視覺化控制元件的X11視窗控制程式碼簡介(轉)視覺化控制元件