禁止组合框comboBox编辑

caddor2011 2011-09-22 09:51:30
ribbon编程里面的


组合框是可以编辑的, 想使之不能具有编辑功能


为此,我重载了以下函数

//重载该函数,使组合框不能输入
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类


CMFCRibbonComboBox* pComboBox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, m_wndRibbonBar.FindByID(ID_COMBO1));



//如何根据id获得去句柄
if(pMsg->hwnd==ID_COMBO1 && pMsg->wParam==WM_CHAR)
return TRUE;


return CMDIFrameWndEx::PreTranslateMessage(pMsg);
}



vs2010+xp


颜色哪行代码 显然是错误的,

改如何获得combox的句柄,

只有这样,才能使组合框失去 编辑功能

ribbon是没有GetSafeHwnd ,之类的

...全文
737 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
HugoTan 2011-11-20
  • 打赏
  • 举报
回复
我想问一下如果下拉组合框里出现相同的信息该如何去掉呢
Aces 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chinatcp 的回复:]

MFC Combox组合框属性的 Type 中,选择 Drop List,
没有这个属性吗?
[/Quote]
对嘛!
zhd320 2011-09-22
  • 打赏
  • 举报
回复
学习了~
罗平 2011-09-22
  • 打赏
  • 举报
回复
转载:

请问如何实现以下功能
右键单击ComboBox下拉列表的某一项,弹出一个菜单,菜单中有一个删除的选项。当我点击这个删除选项之后删除我刚才右键点击的ComboBox中的选项


ComboBox的下拉列表是一个CListBox,在ComboBox响应WM_CTLCOLORLISTBOX的时候可以得到它的句柄,具体代码如下。
BEGIN_MESSAGE_MAP(CCheckComboBox, CComboBox)
//{{AFX_MSG_MAP(CCheckComboBox)
ON_WM_CHAR()
ON_WM_KEYDOWN()
ON_WM_LBUTTONDBLCLK()
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
ON_CONTROL_REFLECT_EX(CBN_DROPDOWN, OnDropDown)
ON_MESSAGE(WM_CTLCOLORLISTBOX, OnCtlColorListBox)
END_MESSAGE_MAP()

LRESULT CCheckComboBox::OnCtlColorListBox(WPARAM, LPARAM lParam)
{
// If the listbox hasn't been subclassed yet, do so...
if (m_hListBox == NULL)
{
HWND hWnd = reinterpret_cast <HWND>(lParam);

if (hWnd != 0 && hWnd != m_hWnd)
{
// Save the listbox handle
m_hListBox = hWnd;

// Do the subclassing
m_pWndProc = reinterpret_cast <WNDPROC>(GetWindowLong(m_hListBox, GWL_WNDPROC));
SetWindowLong(m_hListBox, GWL_WNDPROC, reinterpret_cast <long>(ComboBoxListBoxProc));
}
}

return Default();
}

在ComboBoxListBoxProc中可处理右键:
extern "C" LRESULT FAR PASCAL ComboBoxListBoxProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
static bool bCloseOnLButtonUp = false;

switch (nMsg)
{
case WM_LBUTTONDBLCLK:
case WM_LBUTTONDOWN:
{
CRect rc;
GetClientRect(hWnd, rc);

CPoint pt;
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);

if (PtInRect(rc, pt))
{
......
}

// Do the default handling now
break;
}

case WM_RBUTTONUP:
{
//弹出菜单
}
}

return CallWindowProc(m_pWndProc, hWnd, nMsg, wParam, lParam);
}

caddor2011 2011-09-22
  • 打赏
  • 举报
回复
请大神赐教

[Quote=引用 5 楼 buyong 的回复:]
这种功能可以用Subclassing解决,不过比较繁琐。

引用 3 楼 caddor2011 的回复:
引用 2 楼 chinatcp 的回复:
MFC Combox组合框属性的 Type 中,选择 Drop List,
没有这个属性吗?


有的,这个问题已经解决了,

ribbon不好玩啊,

现在想再实现个功能:

不是左键点击 组合框的项 ,而是用右键 ,
……
[/Quote]
jax_lee 2011-09-22
  • 打赏
  • 举报
回复
Type属性:设置为Drop List,则使ComboBox不能输入只能在下拉菜单中选择;设置Dropdown,则ComboBox中允许输入内容。
buyong 2011-09-22
  • 打赏
  • 举报
回复
这种功能可以用Subclassing解决,不过比较繁琐。
[Quote=引用 3 楼 caddor2011 的回复:]
引用 2 楼 chinatcp 的回复:
MFC Combox组合框属性的 Type 中,选择 Drop List,
没有这个属性吗?


有的,这个问题已经解决了,

ribbon不好玩啊,

现在想再实现个功能:

不是左键点击 组合框的项 ,而是用右键 ,

如组合框有:

选项1

选项2

选项3

右键可以去点击每一项

比如:光标放……
[/Quote]
gemmo 2011-09-22
  • 打赏
  • 举报
回复
如此花哨的功能。。还不如有list view解决。下拉框哪有这么用的。。。
实在要用的话只能自己重新写一个类了。
[Quote=引用 3 楼 caddor2011 的回复:]
引用 2 楼 chinatcp 的回复:
MFC Combox组合框属性的 Type 中,选择 Drop List,
没有这个属性吗?


有的,这个问题已经解决了,

ribbon不好玩啊,

现在想再实现个功能:

不是左键点击 组合框的项 ,而是用右键 ,

如组合框有:

选项1

选项2

选项3

右键可以去点击每一项

比如:光标放……
[/Quote]
caddor2011 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chinatcp 的回复:]
MFC Combox组合框属性的 Type 中,选择 Drop List,
没有这个属性吗?
[/Quote]

有的,这个问题已经解决了,

ribbon不好玩啊,

现在想再实现个功能:

不是左键点击 组合框的项 ,而是用右键 ,

如组合框有:

选项1

选项2

选项3

右键可以去点击每一项

比如:光标放到选项3上,然后点击右键,出现个 快捷菜单:

删除 功能,其他功能


该怎么做??

罗平 2011-09-22
  • 打赏
  • 举报
回复
MFC Combox组合框属性的 Type 中,选择 Drop List,
没有这个属性吗?
huaidan2012126 2011-09-22
  • 打赏
  • 举报
回复
路过 帮顶
無_1024 2011-09-22
  • 打赏
  • 举报
回复
GetDlgItem(IDC_LIST_DEP)
这个试一试?
我一般用ID就是这样获取ID句柄 然后再对控件进行操作
caddor2011 2011-09-22
  • 打赏
  • 举报
回复
兄台高见, 我真有此意, 已经彻底被 ribbon弄烦了

受不了



直接把comboBox中的数据存到某个变量中, 点击每一项,然后弹出对话框来, 再进行删除

当然,谁会在ribbon中解决第三楼的问题,可以告诉我一下,谢谢了啊



[Quote=引用 15 楼 luciferstar 的回复:]

还不如添加个对话框,把所有选项放在list里,选一个,按一下按钮,删除。
关闭对话框后,自动重设combo
[/Quote]
LuciferStar 2011-09-22
  • 打赏
  • 举报
回复
还不如添加个对话框,把所有选项放在list里,选一个,按一下按钮,删除。
关闭对话框后,自动重设combo
caddor2011 2011-09-22
  • 打赏
  • 举报
回复
up up
caddor2011 2011-09-22
  • 打赏
  • 举报
回复
CMFCRibbonComboBox 是ribbon风格的,

这个类不是继承CWnd ,


所以不能用平凡兄的方法。。。。

另外;对于ribbon只有COMMAND ,UPDATAE_COMMAND_UI两个消息 ,可以处理。。。。


如果加右键, 这两个消息响应函数是没有参数的, 如何判断是右键,左键?

右键菜单都不知道怎么做??、



我才是心翼 2011-09-22
  • 打赏
  • 举报
回复
据说选择 Drop List就可以让其不能编辑了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧