[英]How can I create a Spin Button Control dynamically in MFC using CSpinButtonCtrl class?
我意識到這是一個小問題,我什至看了一本MFC書(Prosise的《使用MFC編程Windows》)。 但是,我找不到真正的解決方案。
我正在嘗試動態創建旋轉按鈕控件,這是一個簡化的代碼:
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的值。 我想念什么嗎? 如何動態創建旋轉按鈕控件?
您的旋轉控件缺少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 ++ 。 這就是我實際上得出這個答案的方式。 使用資源編輯器,我只是將一個編輯控件和一個上下控件放到了對話框上,並使用Spy ++來觀察默認的窗口樣式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.