【问题标题】:How are controls put in the caption bar?如何在标题栏中放置控件?
【发布时间】:2010-07-13 05:39:58
【问题描述】:

我注意到 Firefox 4、Opera 和 Chrome,以及 IE 7/8 将按钮和控件放在标题/标题栏中,这是怎么做到的?

谢谢 http://img199.imageshack.us/img199/3307/slayerf.png

alt text http://img199.imageshack.us/img199/3307/slayerf.png

【问题讨论】:

  • 我不确定他们是否这样做。您能否提供一个屏幕截图来说明,突出显示控件?

标签: c++ c user-interface winapi


【解决方案1】:

他们可能做的是完全关闭标题栏(通过排除 WS_CAPTION 窗口样式),在窗口顶部添加一个玻璃区域,然后绘制他们自己的控件。

有关玻璃的更多信息,请参阅 http://msdn.microsoft.com/en-us/magazine/cc163435.aspx

【讨论】:

    【解决方案2】:

    可能他们只是自己处理WM_NCPAINT消息并自己绘制部分非客户区(包括边框和标题栏);它们还将处理 WM_NCLBUTTONDOWN、WM_NCHITTEST 和其他 WM_NC* 消息,以模拟标题栏上按钮的行为。

    或者至少,这是在 Aero 之前通常采用的方式;我不知道它对这种事情有多大的改变。

    【讨论】:

    • 大多数 MS 自己的应用程序(IE、M$Office)没有标题栏。他们历来使用未记录的函数来自己绘制(IIRC 自 XP 以来,这些函数已成为官方并记录在案)。在 Windows 中,不可能完全覆盖标题栏的绘制:那里的按钮没有应用程序知道的状态,因此 Windows 本身必须绘制它们。
    • 是的,你可以做到!查看我关于此的另一篇文章,我将工具栏插入 Microsoft Outlook Express!点击这里codeproject.com/KB/COM/EfOelibrary.aspx .. 请在否决某人之前至少检查一下事实!
    • 我并不是说你不能通过 dll 注入来做到这一点,我是说如果你想在 your 应用程序中做到这一点(这就是OP问-“他们是怎么做到的”)没有必要注入任何东西,因为他们的代码已经按照定义在他们自己的进程中运行。而且,顺便说一句,您应该在其他帖子下发表您的评论。
    【解决方案3】:

    是的,你可以这样做..你已经使用了窗口挂钩,将你的 dll 插入远程进程并远程运行 dll 的功能。这是处理它的完整文章:-

    http://www.codeproject.com/KB/threads/winspy.aspx

    【讨论】:

    • 为什么 FF/IE/Opera 他们应该在他们自己的进程中注入一些代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 2013-09-11
    • 1970-01-01
    • 2023-02-12
    • 2021-11-24
    相关资源
    最近更新 更多