0

假設我有the COpenGLControl class derived from CWnd,並且我正在爲我自己的目的對其進行定製。
我想要做這樣的事情:
1-在我的對話框頂部添加一個縮放工具工具欄按鈕。
2-按下工具欄按鈕後提到下面解釋的功能啓用。
3-如果用戶單擊鼠標左鍵,我們將放大2倍,並將glTranslate放到用戶點擊的位置。
4 - 如果用戶單擊鼠標右鍵,我們會縮小0.5倍,並將glTranslate設置爲用戶單擊的位置。
5-如果用戶點擊另一個工具欄按鈕,上面兩個步驟中解釋的功能將被禁用。
如何實現WM_LBUTTONCLICK事件處理程序

你知道我想在Global Mapper中實現類似Zoom Tool的東西。

我在執行glScaleglTranslate時沒有問題。
只是MFC部分有問題。
搜索默認的消息處理程序,我發現我們有WM_LBUTTONDBLCLKWM_LBUTTONDOWNWM_LBUTTONUPWM_RBUTTONDBLCLKWM_RBUTTONDOWNWM_RBUTTONUP但不是WM_LBUTTONCLKWM_RBUTTONCLK

即使我們有WM_LBUTTONCLKWM_RBUTTONCLK,這些事件處理程序將自創建窗口之前啓用並激活,直到關閉它爲止,但我希望它們僅在特定時間處於活動狀態(點擊縮放工具之後並單擊另一個工具)
我知道從here,也許我需要在用戶定義的消息處理程序中實現這些功能,但我沒有任何想法,因爲我是新來的MFC。
你能幫我從真正的想法出發嗎?

+0

在您提供的[鏈接](http://stackoverflow.com/a/18430091/1245120)中沒有提及「用戶定義的」消息處理程序。只需實現一個[ON_LBUTTONDOWN](http://msdn.microsoft.com/en-us/library/aa232230(v = vs.60).aspx)處理程序,並根據處理程序的狀態在處理程序中決定要執行的操作你的軟件。 –

+0

好了@Michael Walz發佈問題後,我實現了ON_LBUTTONDOWN處理程序。它正如我所期望的那樣工作。但問題是這個處理程序總是處於活動狀態,每當我進入opengl窗口並左鍵單擊glScale並運行glTranslate時。但是我告訴過,我希望處理程序在某個特定時間處於活動狀態(單擊對話框頂部的「縮放工具」工具欄按鈕並單擊其他工具欄按鈕之前)。實際上,我問如何讓鼠標事件處理程序在特定時間處於活動狀態?我不知道! – sepideh

+0

或者我怎樣才能讓鼠標WM_LBUTTONDOWN消息在特定時間發送? – sepideh

回答

0

嘗試一些與此類似:

void COpenGLControl::OnLButtonDown(UINT nFlags, CPoint point) 
{ 
    if (zoom_tool_has_been_clicked) 
    { 
     // do zoom stuff here 

     return ; 
    } 

    CWnd::OnLButtonDown(nFlags, point); 
} 

只給你一個想法。

+0

哦,你是對的。事實上[這是像datenwolf的建議,爲我的班級定義模式](http://stackoverflow.com/questions/18429947/how-to-enable-or-disable-an-event-hander-in-mfc/18430091 #18430091)但我不知道爲什麼我不明白他的目的。看來我總是在尋找困難的解決方案。我真笨。 – sepideh

+0

但是@Michael Walz能否在你的回答中解釋一下**使用用戶定義的消息在哪裏更好?**,**他們在什麼情況下或情況下使用?**只是爲了熟悉情況他們被使用?如果我熟悉這些情況,我會在遇到這種情況時對用戶定義的消息進行更多的搜索。感謝您的關注! – sepideh

+1

用戶定義的消息僅用於發送其他標準WM_ *消息的其他內容。在你的情況下,你想要處理WM_LBUTTONDOWN消息,所以不需要使用用戶定義的消息。 –

相關問題