当前位置: 代码迷 >> VC/MFC >> MFC在单文档界面添加一个旋钮
  详细解决方案

MFC在单文档界面添加一个旋钮

热度:57   发布时间:2016-05-02 03:42:06.0
MFC在单文档界面添加一个按钮
我想在单文档界面添加一个按钮,先获取了界面坐标,再给定按钮的两个坐标,为什么只有当坐标里面用left和top时才能显示出按钮,换成right和bottom时就显示不出来了
int CSYSTEMView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here
CRect rect;
GetClientRect(&rect);//获取界面坐标
CRect rect_button(rect.right-100,rect.bottom-50,rect.right,rect.bottom);   //控制按钮位置、大小
    m_button1.Create("开始",WS_CHILD|WS_VISIBLE|WS_BORDER,rect_button,this,IDC_BUTTON);
    m_button1.ShowWindow(SW_SHOWNORMAL);
return 0;
}

------解决思路----------------------
什么意思哦,RECT就是按钮位置了
------解决思路----------------------
不要在OnCreate里面创建按钮,你调试就会发现OnCreate里面GetClientRect拿到的Rect全是0,这样你按钮的位置完全不对,肯定显示不出来,放到View这里就对了
void CCreateButtonInViewView::OnInitialUpdate()
{
CView::OnInitialUpdate();

CRect rect;
    GetClientRect(&rect);//获取界面坐标
    CRect rect_button(rect.right-100,rect.bottom-50,rect.right,rect.bottom);   //控制按钮位置、大小
    m_CtrlButton.Create("开始",WS_CHILD
------解决思路----------------------
WS_VISIBLE
------解决思路----------------------
WS_BORDER,rect_button,this,1);
    m_CtrlButton.ShowWindow(SW_SHOWNORMAL);
}


之所以OnCreate里面拿GetClientRect是空的,是因为OnCreate是响应WM_CREATE消息的,而这个消息是在
CreateWindow或CreateWindowEx创建客户区之前发出的,换句话说,当你的窗口过程接收到WM_CREATE消息的时候,
窗口正开始创建客户区,当窗口过程return 0后,才会继续完成客户区的任务,而OnCreate函数是在窗口过程return 0前调用的,所以OnCreate执行的时候,窗口客户区才开始创建,你这里面拿客户区只能是空的。
你的按钮显示不出来跟你创建的位置有关,跟你left, top没有关系,除非你指定按钮的RECT值为常量
  相关解决方案