在非对话框窗口中动态创建控件的问题
对话框程序中的控件,例如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); }
浙公网安备 33010602011771号