乙個自動重複按鈕類

2022-02-13 03:04:56 字數 1524 閱讀 3163

void cautorepeatbutton::onkeydown(uint nchar, uint nrepcnt, uint nflags)

cbutton::onkeydown(nchar, nrepcnt, nflags);

}}void cautorepeatbutton::onlbuttondown(uint nflags, cpoint point)

cbutton::onlbuttondown(nflags, point);

}}

當用滑鼠左鍵或空格鍵按下按鈕時,我們首先檢查該按鈕是否已被另乙個按鈕啟用。然後我們檢查計時器是否還沒有啟動,如果沒有啟動,則用初始延遲時間啟動它。最後,呼叫基類處理程式來執行預設處理程式,該處理程式捕獲滑鼠並將按鈕繪製為按下按鈕。 隱藏,複製code

void cautorepeatbutton::ontimer(uint_ptr nidevent)

parent->sendmessage(wm_command, makelparam(getdlgctrlid(), bn_clicked), (wparam)m_hwnd);}}

else

}

當定時器觸發時,我們首先檢查按鈕的狀態。如果滑鼠被用來開始定時器,然後它被移離按鈕,按鈕將不再被按下,所以我們將不希望訊息被傳送。但我們希望當滑鼠移動到按鈕上時它們繼續。在初始時間延遲之後,定時器被重置為重複時間,a 被傳送訊息。 隱藏,收縮,複製code

void cautorepeatbutton::onkeyup(uint nchar, uint nrepcnt, uint nflags)

else

timeractive = false;

keypress = false;

messagesent = false;

}}void cautorepeatbutton::onlbuttonup(uint nflags, cpoint point)

else

timeractive = false;

mousepress = false;

messagesent = false;

}}

當按鈕被釋放時,計時器停止。然後,根據按鈕是否被長時間按住以生成bn_clicked 訊息,我們要麼簡單地釋放滑鼠捕獲並繪製按鈕作為未按下,或者我們呼叫基類處理程式來發射bn_clicked 訊息。然後在下一次按下按鈕時重新設定標誌。 隱藏,複製code

void cautorepeatbutton::onlbuttondblclk(uint nflags, cpoint point)

最後要處理的是使用者雙擊按鈕後按住按鈕。我只是呼叫onlbuttondown來將雙擊視為第二次單擊。如果不這樣做,則計時器不會啟動。 隱藏,複製code

void cautorepeatbutton::settimes(uint initial, uint repeat)

最後,作為乙個方便的函式,我新增了設定初始和重複延遲時間間隔的功能。 歷史 2023年4月13日——發表在codeproject上 本文**於:

乙個字型按鈕類 WTL

本文打算介紹兩個內容 乙個是wtl中非常好用的cdialogresize模板類,能讓你拖動對話方塊改變大小 包括控制項能自動適應對話方塊的改變 另乙個是button按鈕的子類化,產生乙個有立體感的字型 本站上的乙個例子是用mfc做的cmytextbutton類,我把它移植到wtl中,封裝成cfont...

點選乙個按鈕,彈出乙個視窗

在calculator視窗的button1按鈕執行呼叫乙個mycalc類的視窗。void ccalculatordlg onbnclickedbutton1 幾個函式 1.getdlgitem dlg 對話窗,乙個控制項。根據乙個對話窗或乙個控制項的id,返回乙個指向這個對話窗或控制項的物件的指標。...

include once 重複包含乙個類的特殊情況

在寫乙個指令碼的時候發現有兩個不同的模組 ceshi test 都引用了 http類。在指令碼 main.php 會引用 這兩個模組,有時候會同時使用,有時候只用某乙個。同時使用時,指令碼會意外停止。經測試發現問題如下 include once http.class.php 相同路徑的話 沒問題 h...