2010-10-27 93 views
3

我想知道是否有一种方法来添加(编程方式,当然)图标/按钮/除纯文本以外的任何窗口(微软Windows窗口...)的标题栏或最小化/最大化/关闭按钮所在的位置旁边。我可以自己绘制它,并创建一个幻觉它是窗口的一部分,但我想知道在user32 API中是否有这样的方法。如何添加一个自定义按钮到窗口'最小化/最大化/关闭(x)

到目前为止,我找到了一种方法来禁用最小化/最大化/关闭按钮,但没有办法给它们添加一个自定义的按钮。我觉得很奇怪。

这是我想实现: alt text

我一直想知道它是如何在这里完成的,因为使用GDI/GDI +绘制一个按钮,每一个窗口,然后,如果它是由重叠检测另一个窗口,然后只显示非重叠部分在我看来似乎不太可能的解决方案。可能该按钮已在窗口类中注册,以便每个窗口都有此按钮。任何指针怎么办?

另外,假设我没有启用Unicode,我该如何创建一个按钮。然后在下面的代码段:

HWND hwndCommandLink = CreateWindow(
L"BUTTON", // Class; Unicode assumed. 
L"",  // Text will be defined later. 
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_COMMANDLINK, // Styles. 
10,   // x position. 
10,   // y position. 
100,  // Button width. 
100,  // Button height. 
hDlg,  // Parent window. 
NULL,  // No menu. 
(HINSTANCE)GetWindowLong(hDlg, GWL_HINSTANCE), 
NULL);  // Pointer not needed. 
SendMessage(clHwnd, WM_SETTEXT, 0, (LPARAM)L"Command link"); 

SendMessage(clHwnd, BCM_SETNOTE, 0, (LPARAM)L"with note"); 

我需要替换所有的美好的Windows常量与他们长期相当于....然而,当我寻找他们,我得到的是: http://msdn.microsoft.com/en-us/library/bb775951(v=VS.85).aspx

任何指针?

回答

0

这已经在SO处理了好几次了。在视觉主题出现之前,这非常简单 - 当您告诉(WM_NCPAINT)并响应标题栏事件(WM_NCHITTEST,WM_NCLBUTTONDOWN等)时,您只需在标题栏上绘制即可。使用Aero,这是困难的。但它是可能的,并且有关于它的文章。

+0

任何指针实际上意味着我可以到达的一个链接或一段代码。当然它已经在SO中处理过了。我抽取了大量的代码,但它仍然不会在Vista和XP中做我想要的。另外,由于我使用的是Java Native Access,因此我也遇到了其他一些问题,比如寻找覆盖某些东西的方法。那么,再一次,任何指针? – 2010-10-27 10:44:55

+0

顺便提一下,我仍然在寻找答案。总结一下:我需要一种方法来将一个独立于主题的按钮添加到所选Windows操作系统窗口的标题栏中。到目前为止,我已经设法按照教程添加一个按钮(实际上带有“BUTTON”类的小窗口)到标题栏,但是Aero主题的改变使得外观看起来非常难看。顺便说一句,我正在使用JNA。 – 2010-11-03 09:52:06

相关问题