我现在有个VIEW,要在此VIEW里先建个RICHEDIT,再建个非模的对话框,非模的对话框的对话框能SHOW和HIDE掉并且此非模的对话框也能接受事件触发.
代码实现如下:
systemmsgview.h中定义RICHEDIT和DLG:
public:
CRichEditCtrlEx m_SystemMsg;
        CDlg_Face* pDlgFaceBase;CSystemMsgView.CPP中具体实现:
int CSystemMsgView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

RECT rect;
memset(&rect, 0, sizeof(RECT));
m_SystemMsg.Create(ES_LEFT | ES_MULTILINE | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL,rect,this,0); if(pDlgFaceBase == NULL)
{
        pDlgFaceBase =new CDlg_Face();
pDlgFaceBase->Create(this, IDD_DLG_FACE);//
} return 0;
}void CSystemMsgView::OnSize(UINT nType, int cx, int cy) 
{
CView::OnSize(nType, cx, cy); CWnd* pWnd =&m_SystemMsg;
SAFE_CHECKWND(pWnd)
{
RECT rect;
memset(&rect, 0, sizeof(RECT));
this->GetClientRect(&rect);
rect.bottom -= 20;
m_SystemMsg.MoveWindow(&rect);
}
SAFE_CHECKWND(pDlgFaceBase)//249*195
{
RECT rect;
memset(&rect, 0, sizeof(RECT));
this->GetClientRect(&rect);
rect.top = rect.bottom - 195;
rect.right = rect.left + 249;
rect.bottom = rect.top + 195;
pDlgFaceBase->MoveWindow(&rect);
}
}CDlg_Face的STYLE为Child.现在当CDlg_Face显示的时候,此对话框一直得不到焦点.就是鼠标点对话框时,其实还是在点RICHEDIT.
如果CDlg_Face的下面没有RICHEDIT,则此对话框能得到焦点.疑问中,望各位不啬赐教!

解决方案 »

  1.   

    在创建m_SystemMsg的时候加上WS_CHILD,你的对话框与RichEdit是不是在同一个位置上,你应用调用ShowWindow(SW_HIDE)先将m_SystemMsg隐藏掉。
      

  2.   

    不是 在创建m_SystemMsg的时候加上WS_CHILD 的原因,
    另外RichEdit的范围比较大,对话框比较小,而m_SystemMsg也不能隐藏掉的.
      

  3.   

    dlg不能child属性,不然有 焦点和重画问题.因为richedit和dlg已经处于同一层了, 系统不知道该画哪一个.
      

  4.   

    m_SystemMsg create的时候应该加上WS_CHILD样式吧。如果m_SystemMsg不隐藏,也可以把CDlg_Face置顶看看,通过SetWindowPos 设置 HWND_TOP。