一个有关UPDATE_COMMOND_UI的简单问题,求各位大侠帮帮小妹。急!! 大姐,你用错函数了吧,这个函数得到当前编辑框中,高亮内容的函数,应该用GetWindowsText() 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你首先要判断输入焦点是否是该编辑控件后才能这样去判断这个CXXXWnd是CEdit的宿主窗口BOOL CXXXXWnd::IsEditFocus(CWnd* pWnd){ ASSERT( pWnd != NULL ); HWND hWnd = pWnd->GetSafeHwnd(); if (hWnd == NULL) return FALSE; TCHAR szClassName[6]; return ::GetClassName(hWnd, szClassName, 6) && _tcsicmp(szClassName, _T("Edit")) == 0;}void CXXXWnd::OnEditCopy() { // TODO: Add your command handler code here CEdit* pEdit = (CEdit*)GetFocus(); ASSERT(pEdit); ASSERT_VALID(pEdit); pEdit->Copy(); }当然还要添加消息映射.void CXXXWnd::OnUpdateEditCopy(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here CWnd* pWnd = GetFocus(); if (NULL == pWnd || !IsEditFocus( pWnd )) { pCmdUI->Enable( FALSE ); } else { CEdit* pEdit = (CEdit*)pWnd; int nBeg, nEnd; pEdit->GetSel( nBeg, nEnd ); pCmdUI->Enable( nBeg != nEnd ); }} 我的程序是基于对话框的。我在OnUpdateEditCopy()里设置了一个断点,发现只有当点击edit->copy时,程序才会响应OnUpdateEditCopy()。而不是按照预想的那样,在copy菜单项显示的时候就相应该函数。所以问题可能出在程序对消息的响应位置上,可是我不知道基于对话框的程序中的相应顺序是什么样的。 对话框中使用UPDATE_COMMAND_UI需要额外的代码,参见http://www.csdn.net/develop/read_article.asp?id=9490 可是并没有WM_KICKIDLE消息啊。怎么映射? 这个是MFC内部消息,需要自己添加映射函数。 给我写email吧[email protected]《在mfc经典问答》里面有这个问题,我可以把源代码给你:) 文件导出乱码如何解决? 初学者问,VS中的Class View啊,Properties都对应的是什么玩意? VC操作数据库能否调用PL/SQL 请教鼠标无法响应从CWnd派生的窗口非客户区? VB调用VC写的DLL,第二次运行报错 最大化窗口,菜单失效问题 高手请进 . 如何使用SDK不用MFC,在窗口中建立Web Browser控件并实现改变界面的接口? 为什么在VC7中include一个头文件会出现错误?? vc读取excel2003的一个问题? 救命!!!我的switch...case为何不成功?????? 谁知道矢量字库的格式??
这个CXXXWnd是CEdit的宿主窗口
BOOL CXXXXWnd::IsEditFocus(CWnd* pWnd)
{
ASSERT( pWnd != NULL );
HWND hWnd = pWnd->GetSafeHwnd();
if (hWnd == NULL)
return FALSE; TCHAR szClassName[6];
return ::GetClassName(hWnd, szClassName, 6) &&
_tcsicmp(szClassName, _T("Edit")) == 0;
}void CXXXWnd::OnEditCopy()
{
// TODO: Add your command handler code here
CEdit* pEdit = (CEdit*)GetFocus();
ASSERT(pEdit);
ASSERT_VALID(pEdit);
pEdit->Copy();
}
当然还要添加消息映射.void CXXXWnd::OnUpdateEditCopy(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CWnd* pWnd = GetFocus();
if (NULL == pWnd || !IsEditFocus( pWnd ))
{
pCmdUI->Enable( FALSE );
}
else
{
CEdit* pEdit = (CEdit*)pWnd;
int nBeg, nEnd; pEdit->GetSel( nBeg, nEnd );
pCmdUI->Enable( nBeg != nEnd );
}
}
http://www.csdn.net/develop/read_article.asp?id=9490
[email protected]
《在mfc经典问答》里面有这个问题,我可以把源代码给你:)