2017-09-26 80 views
2

我意識到這是一個微不足道的問題,我甚至看了一本MFC書(由Prosise編寫的Windows with MFC)。但是,我找不到解決方案。如何在MFC中使用CSpinButtonCtrl類動態創建Spin按鈕控件?

我想動態創建一個旋轉按鈕控制,這裏是一個簡化的代碼:

CEdit* m_editControl = new CEdit(); 
    m_EditControl->Create(WS_VISIBLE | WS_CHILD , rectEdit, this, EditID); 

    CSpinButtonCtrl* m_spinControlCtrl = new CSpinButtonCtrl; 
    m_spinControlCtrl->Create(WS_VISIBLE | WS_CHILD, rectSpinButton, this, SpinID); 

    m_spinControlCtrl->SetBase(10); 
    m_spinControlCtrl->SetBuddy(m_editControl); 
    m_spinControlCtrl->SetRange(-55, 55); 

我的問題是,旋轉按鈕不會改變的CEdit的價值。我錯過了什麼嗎?我怎樣才能動態地創建一個Spin按鈕控件?

回答

3

你的旋轉控制缺少風格UDS_SETBUDDYINT

UDS_SETBUDDYINT導致上下控制設置 夥伴窗口的文本(使用WM_SETTEXT消息)的位置變化時。 文本由位置格式化爲十進制或 十六進制字符串組成。

我還建議設置UDS_ARROWKEYS,這樣當焦點位於編輯控件上時,可以使用箭頭鍵來遞增或遞減數值。

對於編輯控件我想補充WS_TABSTOP,使用戶可以使用TAB 關鍵WS_EX_CLIENTEDGE導航這樣的編輯控件顯示的常規主題邊界。

我還注意到,您使用動態內存分配的控件,這是沒有必要的。只需創建像CEdit m_EditControl;這樣的非指針成員變量,這樣就不必擔心釋放。

固定碼:

m_EditControl.CreateEx(WS_EX_CLIENTEDGE, L"Edit", L"0", WS_VISIBLE|WS_CHILD|WS_TABSTOP, 
         rectEdit, this, EditID); 

m_spinControlCtrl.Create(WS_VISIBLE|WS_CHILD|UDS_SETBUDDYINT|UDS_ARROWKEYS, 
         rectSpinButton, this, SpinID); 

m_spinControlCtrl.SetBase(10); 
m_spinControlCtrl.SetBuddy(&m_EditControl); 
m_spinControlCtrl.SetRange(-55, 55); 

我還強烈建議學習使用間諜++。這就是我實際得到這個答案的方式。使用資源編輯器,我將一個編輯控件和一個上下控件放到對話框中,並使用Spy ++觀察默認窗口樣式。