读书人

MFC 编辑框重载默认菜单显示不正常有

发布时间: 2013-02-25 10:23:36 作者: rapoo

MFC 编辑框重载默认菜单显示不正常问题
我想重载CEdit默认弹出的菜单,于是新建了一个CListEdit继承CEdit,重载OnContextMenu函数,当右键点击编辑框内容除,弹出我想显示的LIST BOX,但是总是显示不正常,但是可以点选list box中的内容,或者是显示正常,但是不能点选list box中的内容,求解

CRect rect;
((CEdit*)GetDlgItem(IDC_EDT_PLACE))->GetWindowRect(&rect);
ScreenToClient(&rect);
g_pPlace = new CListEdit;
g_pPlace->Create(WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_LEFT | WS_BORDER,rect, this, 1);
__CHEK_NULL(g_pPlace);
g_pPlace->nID = IDC_LIST_PLACE;
//生成的一个新的list edit控件,覆盖在原有的一个edit(IDC_EDT_PLACE)控件上(方便调整位置,IDC_EDT_PLACE是隐藏的)
//然后重载了OnContextMenu函数,当SetWindowPos参数设为wndTop时,nID控件不能正常显示,但是可以正常点击,如图1

//参数设为wndBotton或者this时,nID控件可以正常显示,但是不能正常点击(响应list edit的点击函数),如图2

void CListEdit::OnContextMenu(CWnd* pWnd, CPoint pos)
{
extern CWnd* pMainWnd;
CListBox* pList = ((CListBox*)(pMainWnd->GetDlgItem(nID)));

pMainWnd->ScreenToClient(&pos);
if (pList){
bool f = pList->SetWindowPos(&wndTop,pos.x ,pos.y ,0,0,SWP_NOSIZE | SWP_NOCOPYBITS);
//pList->BringWindowToTop();
//pList->SetParent(this);

//pList->SetSel(0);
pList->ShowWindow(true);
}
}

我觉得很奇怪,按理来说top是最高层,但是为什么反而不显示呢?不知道是我哪里搞错了,求解惑
图1:MFC  编辑框重载默认菜单显示不正常有关问题

图2:MFC  编辑框重载默认菜单显示不正常有关问题 MFC
[解决办法]

引用:
DWORD dwStyle = WS_POPUP
[解决办法]
WS_BORDER;
LPCTSTR lpszClassName = AfxRegisterWndClass(CS_HREDRAW
[解决办法]
CS_VREDRAW,LoadCursor(NULL,IDC_ARROW),NULL);

g_pListBox = new CListBox;
g_pListBox->CreateE……

看看我写的一个小测试程序:
CButton ctrl;成员变量
CListBox lbx;

CRect rc;
ctrl.GetWindowRect(&rc);
rc.top = rc.bottom;
rc.bottom = rc.top + 150;

lbx.CWnd::CreateEx(0,"listbox",NULL,WS_VISIBLE
[解决办法]
WS_POPUP
[解决办法]
WS_BORDER,rc,&ctrl,0);
lbx.AddString("CListBox");
lbx.AddString("CListBox");
lbx.AddString("CListBox");
lbx.AddString("CListBox");
lbx.AddString("CListBox");

测试OK

读书人网 >VC/MFC

热点推荐