2011-09-30 30 views
0

我想使用一個編輯控件以及使用MFC visual studio.net 2003旋轉控制。我已經執行了旋轉控制的基本設置,如設置「AutoBuddy 「屬性和」SetBuddyInteger「屬性爲True,以便Spin控件與其旁邊的編輯控件協調工作。在我的Spin控件的事件處理程序中,當我試圖調用Invalidate()函數時,我遇到了一個問題。我的編輯控件中的浮點值不更新並保持爲零。如果我刪除Invalidate(),那麼該值會遞增,但我的繪畫函數不會明顯更新。下面給出以下代碼:編輯控件不更新與自旋控制MFC

void CMyDlg::OnSpinA(NMHDR *pNMHDR, LRESULT *pResult) 
{ 
    LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR); 
    // TODO: Add your control notification handler code here 
    UpdateData(); 
    m_A = m_ASpinCtrl.GetPos(); // m_A is my edit control float value variable 
    Invalidate(); // Invalidate is to be called to update my paint function to redraw the drawing 
    UpdateData(false); 
    *pResult = 0; 
} 

我已經正確執行了Tab鍵順序以及兩個控件。

關於我哪裏出錯的建議?

在此先感謝。

回答

2

m_A在獲取位置時會做一些奇怪的事情,並且不會返回正確的值。嘗試使用指針來獲取您的位置和值,然後執行invalidate()。

{ 
     LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR); 
     // TODO: Add your control notification handler code here 
     UpdateData(); 

     CString tempStr; 
     m_A += pNMUpDown->iDelta; 
     tempStr.Format("%f",m_A); 
     m_ACtrl.SetWindowText(tempStr); // Like a CEdit m_ACtrl to display your string 

     Invalidate(); 
     UpdateData(false); 
     *pResult = 0; 
} 

這應該工作得很好。如果您仍然遇到任何問題,請告訴我。

3

如果你只是想要一個旋轉的整數,你不必重載任何東西。

旋轉控件必須緊靠在選項卡順序中的編輯控件旁邊。隨着AutoBuddy這就是你所要做的。

+0

是的,我認爲我壓倒一切。但是如何解決這個問題並不十分清楚。請你給我簡要介紹一下。 – Emulator

+0

您的整個代碼片段是覆蓋使用旋轉控制時獲得的通知方法的方法。嘗試在提到OnSpinA的消息映射中註釋掉該行! – dwo