【问题标题】:BringWindowToTop is not working in the ActiveX controlBringWindowToTop 在 ActiveX 控件中不起作用
【发布时间】:2015-09-18 06:30:20
【问题描述】:

我设计了一个由一个编辑框和一个组合框组成的activeX控件。

我试图将编辑框放在组合框上,这样每当用户从组合框中选择任何项目时,它都应该放在编辑框上。所以我的编辑框应该覆盖组合框的编辑部分,并且组合框只有箭头按钮可见。

问题:每当我试图将鼠标光标移到该控件上时,组合框就会出现在编辑框的前面。我已经进行了诸如编辑框之类的设计只是掩盖了组合框,但只有当焦点回到组合框并且正在将组合框放在前面。

尝试过的方法:在我定义的函数之一中,我尝试了以下所有函数来在组合框上创建编辑框。

1)BringWindowToTop

2)设置前景窗口

3)设置窗口位置

我对该函数的代码:

void DetermineWindowsShown()

{

 m_edit.EnableWindow(m_bEnabled);

m_combo.EnableWindow(m_bEnabled);

//here only I tried all the diff function
m_edit.BringWindowToTop();
//m_edit.SetForegroundWindow();
//m_combo.SetWindowPos(&CWnd::wndBottom ,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

}.

我在很多地方都调用了DetermineWindowsShown,这样编辑框总是在组合框上方。

【问题讨论】:

  • 你为什么要重新发明一个 simple 或 drop-down 风格的Combo Box 控件?您真正想要达到什么目的?
  • 其实我想在展示给用户之前对item做一些操作。我们无法将组合框的编辑框设置为与其项目列表不同的值,因此我使用单独的编辑框。例如,combobx 有项目:abc,def,xyz。当我选择 abc 时,它应该显示 abc123(123 一个我想要连接的字符串) 并带有下划线。
  • 如果你让它拥有绘制控制会更容易。

标签: c++ visual-c++ combobox mfc editbox


【解决方案1】:

BringWindowToTop 通常用于 MDI 窗口。 SetForegroundWindow 用于主窗口。

您应该可以使用SetWindowPos,将其应用于两者,而不仅仅是一个:

m_combo.SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
m_edit.SetWindowPos(&CWnd::wndTop, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

【讨论】:

  • 试过但还是同样的问题... :(
  • 如果在这里不起作用,那是因为整个方法存在问题。只需按照其他评论中的建议尝试一个简单的或下拉组合框,或者制作一个自定义控件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
相关资源
最近更新 更多