捲軸處理筆記

來源:互聯網
上載者:User

提示:看看原代碼會明白下面所說的!
原代碼
處理捲軸時的問題:
有了WS_VSCROLL後會出現捲軸,但是無法滾動,還沒有鍵盤介面,也沒有初始化滾動塊的大小等等

我們要做的事情是:
1.要處理滾動訊息
2.移動滾動塊到滑鼠指定的位置
3.並更新客戶區的內容

滾動訊息:
WM_VSCROLL
nScrollCode = (int) LOWORD(wParam); // scroll bar value
nPos = (short int) HIWORD(wParam);  // scroll box position
hwndScrollBar = (HWND) lParam;      // handle to scroll bar

他告訴我們,使用者對捲軸的行為(nScrollCode)和滾動塊的位置(nPos)以及捲軸的控制代碼
Mesage Cracker
void SysMets_OnVScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos)
{
}

滾動nScrollCode:
SB_LINEUP    點擊向上小箭頭
SB_PAGEDOWN  點擊滾動塊下面空白地區
SB_THUMBTRACK   移動滾動塊

如何同步更新客戶區的內容:
1.在處理滾動時要同時更新客戶區的內容要產生WM_PAINT訊息
InvalidateRect,ScrollWindow,RedraweWindow三者選一
2.考慮進滾動塊的位置來定位客戶區內容的顯示位置

奇妙滾動的原理:
滾動時,要求客戶區要重新繪製,當下滾動時,客戶區向上滾動,定量是什麼意思呢?
當捲軸位置為0時,顯示第0行 座標(0,0) 第1行座標(0,1)
當捲軸位置向下移動一個單位時,顯示第0行座標(0,-1)---也就是看不見了,第1行座標(0,0)--奇妙的向上

滾動了

所以為了要從基於0開始,就要在原來的座標上減去滾動塊的位置值
i-iVscrollPos

新捲軸函數
SetScrollInfo
GetScrollInfo
hwnd是有捲軸的父視窗,不是捲軸的hwnd
fMask表示你要取Scroll的什麼資訊 

捲軸最好的初始化的地方是WM_SIZE訊息處

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.