如何在MFC应用程序中放置一个按钮?

时间:2012-09-08 18:57:09

标签: visual-c++ button mfc

我的mfc程序在客户端区域中绘制了以下形状 - 现在我想在其旁边放置一个按钮以重新排列形状。

enter image description here

我知道我可以使用工具栏或菜单按钮,但有没有办法可以在框旁边放置一个按钮?像这样的东西:

enter image description here

2 个答案:

答案 0 :(得分:5)

您需要做的就是创建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消息地图,您可以像对待其他任何按钮一样对按钮的消息作出反应。

答案 1 :(得分:0)

您可以使用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,以便您可以在父窗口中找到它,并处理来自按钮操作的消息。

查看Windows API documentation on CreateWindow