簡體   English   中英

如何使用CSpinButtonCtrl類在MFC中動態創建旋轉按鈕控件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM