难题。。跪求高手帮忙

kkk0438 2011-06-08 11:05:40
有些控件内部又关联的子控件,例如Toolbar中嵌入了按钮,ComboBox中包含了ListBox和Edit两个控件。我想知道这些子控件的句柄有方法没?最好是Win32 Api的方法。例如我想知道Toolbar中的按钮的句柄 或者状态有没有什么好办法?
...全文
154 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjut018 2011-06-09
  • 打赏
  • 举报
回复
GetDlgItem(ID)只是得到指针,GetDlgItem(ID)->m_hWnd;
kkk0438 2011-06-09
  • 打赏
  • 举报
回复
楼上没理解我的意思,GetDlgItem(ID)得不到句柄的,我试过了
zjut018 2011-06-09
  • 打赏
  • 举报
回复
或者你单独为控件里面的控件关联对话框,对话框风格是child
zjut018 2011-06-09
  • 打赏
  • 举报
回复
你只写一句GetDlgItem(ID),得到了的话弹出消息,看看有没有得到。
kkk0438 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 lsq19871207 的回复:]

控件有ID用GetDlgItem(ID)不行么?
[/Quote]
有ID ,但是GetDlgItem(ID)不行
kkk0438 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kyotrue 的回复:]

引用 11 楼 kkk0438 的回复:
还有其他办法不?难道真的没有控件句柄。。。不大理解。。


你所谓的控件都是窗口,窗口才有句柄。而Toolbar就是一个最基础的控件,整个就是一个窗口,不是说看起来像个按钮就一定是个按钮控件。
[/Quote]
我看了MSDN里面有类似按钮的东西,就是不清楚那一类控件是怎么实现的
信阳毛尖 2011-06-09
  • 打赏
  • 举报
回复
控件有ID用GetDlgItem(ID)不行么?
kyotrue 2011-06-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 kkk0438 的回复:]
还有其他办法不?难道真的没有控件句柄。。。不大理解。。
[/Quote]

你所谓的控件都是窗口,窗口才有句柄。而Toolbar就是一个最基础的控件,整个就是一个窗口,不是说看起来像个按钮就一定是个按钮控件。
Mdesigner 2011-06-09
  • 打赏
  • 举报
回复

不太清楚,不乱说。。
kkk0438 2011-06-09
  • 打赏
  • 举报
回复


还有其他办法不?难道真的没有控件句柄。。。不大理解。。
不二星空 2011-06-09
  • 打赏
  • 举报
回复
求解~~~!!!!!没人知道?
kkk0438 2011-06-09
  • 打赏
  • 举报
回复
厄。。没我想要的答案。。。不过还是谢谢大家
信阳毛尖 2011-06-09
  • 打赏
  • 举报
回复
返回值为NULL的话,调用GetLastError函数看看是什么情况
kyotrue 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kkk0438 的回复:]
Toolbar中的按钮怎么获取状态?我试了::GetDlgItem() FindWindowEx这些都不行 我知道他的ID号就是不知道怎么整。。
[/Quote]

TB_GETSTATE消息可以获取状态,TB_SETSTATE设置
lResult = SendMessage(      // returns LRESULT in lResult     (HWND) hWndControl,      // handle to destination control     (UINT) TB_GETSTATE,      // message ID     (WPARAM) wParam,      // = (WPARAM) (int) idButton;    (LPARAM) lParam      // = 0; not used, must be zero );  


TBSTATE_CHECKED
The button has the TBSTYLE_CHECK style and is being clicked.

TBSTATE_ELLIPSES
Version 4.70. The button's text is cut off and an ellipsis is displayed.

TBSTATE_ENABLED
The button accepts user input. A button that doesn't have this state is grayed.

TBSTATE_HIDDEN
The button is not visible and cannot receive user input.

TBSTATE_INDETERMINATE
The button is grayed.

TBSTATE_MARKED
Version 4.71. The button is marked. The interpretation of a marked item is dependent upon the application.

TBSTATE_PRESSED
The button is being clicked.

TBSTATE_WRAP
The button is followed by a line break. The button must also have the TBSTATE_ENABLED state.
kyotrue 2011-06-08
  • 打赏
  • 举报
回复
CommonControl里面的控件,里面的子控件基本都是没有句柄的,因为不是通过父窗口/子窗口这种模式创建的。反正我用的List-View、Tree-View都是这样。

创建一个按钮,可以使用CommonControl里面的“Button”窗口类,作为一个子窗口加入我们的窗口,子窗口的事件什么的都由“Button”窗口类的消息处理函数去处理。
但是也可以由我们的窗口自己绘制按钮,自己处理那一块区域的鼠标、键盘事件。

CommonControl这样做可以避免占用大量的句柄资源。
kkk0438 2011-06-08
  • 打赏
  • 举报
回复
Toolbar中的按钮怎么获取状态?我试了::GetDlgItem() FindWindowEx这些都不行 我知道他的ID号就是不知道怎么整。。
kkk0438 2011-06-08
  • 打赏
  • 举报
回复
FindWindow和FindWindowEx没有效果的
康斯坦汀 2011-06-08
  • 打赏
  • 举报
回复
如果是正常的Windows控件都有句柄。都可以看到。看不到的都是非正常的。
King_hhuang 2011-06-08
  • 打赏
  • 举报
回复
HWND FindWindowEx(
HWND hwndParent, // handle to parent window
HWND hwndChildAfter, // handle to a child window
LPCTSTR lpszClass, // pointer to class name
LPCTSTR lpszWindow // pointer to window name
);
kkk0438 2011-06-08
  • 打赏
  • 举报
回复
是系统的控件 我用My spy看不到句柄。。。
加载更多回复(4)

16,471

社区成员

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

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

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