乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 29|回复: 1

自定义工具栏

[复制链接]

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2006-10-28 21:45:06 | 显示全部楼层 |阅读模式
好的,这不是你的;“普通的”;工具栏自定义问题。这太简单了……不过,这是一种高级编辑技术,我正在研究AutoCAD显示的工具栏。我学到的信息可能有助于打开用户以前从未想过要做的各种定制领域
好吧。我必须承认我被难住了,我不知道;我不喜欢我被难倒……但除此之外;我已经掌握了编辑过程的基本原则。我赢了'我不会在这里发布代码,因为坦率地说,它非常难看,充满了bug,而且在其他方面难以理解,但我将为你们中那些不胆小的人介绍这个过程
例如,创建用户可以输入信息的文本框(很像层的组合框)的步骤如下:
使用Windows API调用识别要放置文本框控件的容器。这可以通过enumChildWindows来完成,然后检查每个窗口的正确属性,以确定它是正确的窗口。例如,如果您想在枚举窗口时将控件添加到图层工具栏,只需使用标题测试该控件;“层”;(是的,即使固定的工具栏也有标题)
一旦您识别了工具栏,请使用SetWindowPos API将工具栏设置为您想要的大小,确保使用zorder和nomove标志,否则工具栏将移动,当它更改上下文时,您可能会松开它
使用CreateWindowEX API创建子控件(在这个例子中,在新扩展的工具栏中有一个“EDIT”类。你也可以在那个时候传递一些默认文本。现在,你为什么问我可以在这里发布这个。原因是我希望有一些善良的灵魂拥有一些API编程的高级知识,可以帮助我解决一个棘手的问题。我可以在工具栏上创建控件,但只要e用户移动工具栏,工具栏恢复到原来的大小。没问题,我想…我会删除窗口类属性;CS_HREDRAW“;和“;CS_VREDRAW“;,因此,防止重新绘制工具栏时调整其自身大小…问题是,它仍然调整自身大小…或者更正确地说,AutoCAD将其(afxWnd70类)调整为ToolbarWindow32的大小…这显然不好,因为这样您就看不到文本框。所以,我需要做的是1)注入;编辑;类进入ToolbarWindow32类(最初成功,但afxWnd70仍会调整为ToolbarWindows32的原始大小)或2)对已经子类化的afxWnd70类进行子类化,以便我可以截获调整大小的消息,并将参数更改为我需要的参数;3) 设置一个计时器(简单),不断更新工具栏大小(性能严重下降)4)在工具栏上放置额外的按钮,使其保持所需的宽度,并将我的控制置于顶部(按钮保持顺序,因此当鼠标在其上移动时,始终位于顶部)
好的,这就是场景……现在我该如何实现它……正如我所说,基本功已经开始发挥作用了,但如果我有其他几个勇敢的人可能对实现同样的目标感兴趣,我会做得更好
想象一下,可以在工具栏上放置任何窗口类(选项按钮、编辑框、组合框等)。您将能够实现一个工具栏,其中有一个图形,显示您在文本框中输入的股票的趋势。。。很像本论坛其他地方显示的lisp程序,用于在绘图窗口中跟踪股票表现
Don'别害怕……当然你们现在都知道我有多愚蠢了

回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2006-10-28 22:05:09 | 显示全部楼层

I港#039;我手头没有什么事,我可以#039;我不记得怎么做的名字(很可能是子类化),但是是的,你可以截取窗口#039;s winproc(通过将您的winproc分配给注册的窗口类),处理您需要的内容,并将您希望窗口处理的内容发送到默认(对于该窗口)winproc。这将是我能想到的捕捉和处理大小/移动消息的最佳方式
我知道帮助不多,但可能会给你或其他人一些想法
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 21:17 , Processed in 0.325198 second(s), 57 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表