關於按鈕等控制項提示資訊CXInfoTip 類改進

2021-04-13 08:33:15 字數 1459 閱讀 9062

摘錄:[開始] 關於

pretranslatemessage

有乙個常見的問題就是與此有關:如果編寫了乙個

mfc dll

並從另外的乙個

mfc主工程之中呼叫這個

mfc dll

中的modeless dialog

的話,modeless dialog

的pretranslatemessage

不會被調。因為

mfc dll

和這個mfc

工程擁有不同的

afxmodulethreadstate

,因此在

mfc dll

中建立的

modeless cdialog

物件不在

mfc工程的控制代碼表中(

cwnd::fromhandlepermanent

返回null

),因此雖然

mfc主工程中的

的pretranslatemessage

會被調(注意此時

dialog

的訊息迴圈在

mfc主工程裡面),但是不會呼叫

mfc dll

中建立的那個

modeless cdialog

的pretranslatemessage

函式。因此需要特殊處理。一般有兩種方法,一種是直接在

mfc主工程中的

裡面呼叫

mfc dll

的(可以專門在

mfc dll

中export

乙個專門的函式來做這件事情)。另外的方法是使用鉤子,在鉤子訊息處理函式之中,判斷目標視窗是否是當前具有焦點的視窗,如果是,則直接呼叫目標視窗的

pretranslatemessage

函式(前提是你有要儲存這個物件的指標)。

摘錄 [結束]

解決[原創http://blog.csdn.net/hongjie7117/]:

作者修改了cxinfotip類中**使其能夠支援在多重介面都可以使用的方法。relayevent

過載cxinfotip中的relayevent函式;

函式如下

void

cxinfotip::relayevent( cwnd 

*pwnd, cpoint point)}}

//hide the tooltip

if(point 

!=m_ptorigin)}

在呼叫處 或是主程式或是dll中的無模式對話方塊中響應wm_setcursor訊息;

bool 類名::onsetcursor(cwnd

*pwnd, uint nhittest, uint message)  

問題終於解決了。發出以便大家參考,其他cxinfotip類使用方法等資訊

請參考

控制項提示資訊 滑鼠懸停時

label.settooltip 標籤提示資訊 滑鼠懸停在指定控制項上時,控制項旁邊提示的資訊 s label.tooltip 返回滑鼠在指定控制項上時,控制項旁邊提示的資訊 label.settooltipduration 2000 設定 滑鼠在指定控制項上時,提示資訊顯示的時間 單位 毫秒 s ...

關於DataGrid等控制項中的自動編號

序號內容1 taye 2box 3glass 4starcraft 一 正序 a allowpaging false情況下 container.itemindex 1 itemtemplate asp templatecolumn asp datagrid 就可以實現 不過更有趣的方法是使用這個方法...

關於DataGrid等控制項中的自動編號

序號內容 1taye 2box 3glass 4starcraft 一 正序 a allowpaging false情況下 container.itemindex 1 itemtemplate asp templatecolumn asp datagrid 就可以實現 不過更有趣的方法是使用這個方法...