我的mfc程序在客戶區中繪製了以下形狀 - 現在我想在此旁邊放置一個按鈕以重新排列形狀。如何在MFC應用程序中放置按鈕?
我知道我可以使用一個工具欄或菜單按鈕,但有什麼辦法可以把旁邊的盒子上的按鈕?是這樣的:
我的mfc程序在客戶區中繪製了以下形狀 - 現在我想在此旁邊放置一個按鈕以重新排列形狀。如何在MFC應用程序中放置按鈕?
我知道我可以使用一個工具欄或菜單按鈕,但有什麼辦法可以把旁邊的盒子上的按鈕?是這樣的:
所有你需要做的就是創建一個CButton
,並適當地定位它。
//.h
#define MYBUTTONID 10000 //or whatever doesn't conflict with your existing resources
public class CMyVew : public CView
{
CButton m_Button;
virtual void OnInitialUpdate();
void RepositionButton();
}
//.cpp
void CMyVew::OnInitialUpdate()
{
//this creates the actual button GUI window
m_Button.Create("Rearrange", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(0,0,0,0), this, MYBUTTONID);
RepositionButton();
}
void CMyVew::RepositionButton()
{
//work out button position you need
m_Button.MoveWindow(x, y, width, height);
}
請注意,該按鈕只創建一次,並負責繪圖本身。你不需要擔心它在OnDraw()
或類似的東西。
你唯一需要擔心的是按鈕應該移動的位置。這就是爲什麼我將RepositionButton()
函數分離出來的原因。例如,如果您使用的是CScrollView
和用戶滾動,按鈕窗口沒有這方面的知識,所以你需要作出反應,滾動事件,並呼籲RepositionButton()
可以反應按鈕的信息,就像你任何其他按鈕通過添加ON_BTN_CLICKED
消息映射。
您可以通過使用Windows API創建自己的按鈕。最主要的是獲取客戶區的窗口句柄,然後在創建按鈕時使用它作爲父句柄。
例如,下面是使用Windows API創建按鈕的示例。
Create()方法是CWnd類的一部分。
CRect windRect (xColumn, xRow, xColumn + nWidth, xRow + nHeight);
Create (_T("BUTTON"), myCaption, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_MULTILINE, windRect, pParentWnd, m_myId);
您將需要知道多大和高度來製作按鈕以及標識符。該id是需要的,以便您可以在父窗口上找到它並處理來自按鈕操作的消息。
CButton有問題嗎? – GazTheDestroyer
但我怎樣才能做到這一點與MFC? – Ghost
你好,Gaz,我正在製作一個sdi MFC解決方案。我按照你的建議創建按鈕時沒有問題,但是當我單擊「創建新文檔」時,那些代碼m_Button.Create(...)將再次運行,然後我在該行出現錯誤。如何解決它?或者我不應該那樣使用它? – sflee