在非对话框窗口中动态创建控件的问题

对话框程序中的控件,例如button、groupbox之类,是直接放上去的。当然,在MFC中各个控件都有与其相对应的类,以支持程序员在非对话框程序中动态创建控件。

如果不是基于对话框的程序,却想通过代码动态创建EDIT、LISTBOX、BUTTON之类的控件,遇到的问题是,Create函数返回成功,但控件却没有显示,关键是,这里需要加上SetWindowPos调用,并且使用SWP_SHOWWINDOW参数。请看以下代码:

    //建立消息框的外框    
    m_pButtonGroup = new CButton;
    if(!m_pButtonGroup->Create(_T("着法列表"),WS_CHILD|WS_VISIBLE|BS_GROUPBOX,rectRoundGroup,this,1992))
        AfxMessageBox(_T("建立组合框失败。"));
    else{
        m_pButtonGroup->SetWindowPos(NULL,rectRoundGroup.left,rectRoundGroup.top,rectRoundGroup.right-rectRoundGroup.left,rectRoundGroup.bottom-rectRoundGroup.top,SWP_SHOWWINDOW);
        m_ftGroup.CreatePointFont(100,_T("黑体"));
        m_pButtonGroup->SetFont(&m_ftGroup);
    }
    //建立消息窗口
    m_pMsgList = new CListBox;
    if(!m_pMsgList->Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL,rectRoundMsg,this,ID_ROUND_LIST)){
        AfxMessageBox(_T("建立着法显示控件失败。"));
    }else{
        m_pMsgList->SetWindowPos(NULL,rectRoundMsg.left,rectRoundMsg.top,rectRoundMsg.right - rectRoundMsg.left,rectRoundMsg.bottom-rectRoundMsg.top,SWP_SHOWWINDOW);
        //修改字体
        m_listFont.CreatePointFont(100,_T("宋体"));
        m_pMsgList->SetFont(&m_listFont);
    }

 

posted on 2013-09-21 10:21  cpp520  阅读(291)  评论(0)    收藏  举报

导航