标签: nonclient

航空玻璃窗上的非客户端绘画

现在我定制我的应用程序的标题栏.我的目标是在标题栏上添加一个额外的按钮.我以前的问题 人们告诉我我可以自定义非客户区的方式.这是完美的,除了一件小事 - 发光!我可以在非客户区域绘制发光,但我无法将其扩散到窗外.我也找不到关于这个subj的任何资源.

我查看了这个示例并制作了自己的测试应用程序,用于调查非客户端绘图工具.我的应用程序窗口的屏幕截图:

我的应用程序的窗口

因此,当我被边框框剪裁时,您可以看到系统按钮从窗口发出光芒.

例如,Skype的窗口在标题栏中有四个自定义按钮,它们可以从窗口框架中"发光":

Skype的窗口

任何人都可以建议我找出从窗口画出按钮发光的方法吗?
提前致谢!

[编辑]
谢谢大家的答案!

c# c++ user-interface nonclient aero

38
推荐指数
2
解决办法
7113
查看次数

滚动条绘画问题与加厚的非客户端窗口边框

我试图在带有滚动条的自定义控件的客户区周围绘制彩色边框.为此,我设置BorderWidth为正整数并响应该WM_NCPAINT消息.这听起来像混合VCL和Win32,但该BorderWidth属性只是导致对WM_NCCALCSIZE消息的适当处理.

以下代码是SSCCE:

unit Unit6;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TSample = class(TCustomControl)
  protected
    procedure Paint; override;
    procedure CreateParams(var Params: TCreateParams); override;
    procedure WMNCPaint(var Message: TWMNCPaint); message WM_NCPAINT;
  published
    property BorderWidth;
  end;

  TForm6 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form6: TForm6;

implementation

{$R *.dfm}

{ TSample }

procedure TSample.CreateParams(var Params: TCreateParams);
begin
  inherited; …
Run Code Online (Sandbox Code Playgroud)

delphi controls border nonclient scrollbar

11
推荐指数
0
解决办法
398
查看次数

处理WM_NCPAINT"破坏"Vista/Aero上的DWM玻璃渲染

我正在尝试创建一个窗口,WM_NCPAINT根据用户设置在具有Aero/Glass和自定义渲染帧(通过处理)之间切换.(Windows Vista).

DwmComposition已启用.我的应用程序提供了玻璃框架,但是一旦我切换设置以触发自定义WM_NCPAINT代码路径然后切换回使用DefWindowProcWM_NCPAINT处理,原生框架现在永远停留在"Vista Basic"风格 - 它不再是半透明的标题按钮与普通的Aero/Glass按钮看起来不同.

我已经尝试了各种方法,从发送SWP_FRAMECHANGED到更改窗口样式,然后将其更改回来,隐藏它等等,但是一切都无济于事.似乎只要我处理WM_NCPAINT一个玻璃窗而不是推迟到DefWindowProc我的窗户就会永远"破碎".

我在MSDN上找到了一个C#/ WPF示例(代码点msdn dot microsoft dot com slash chrome),似乎表明只需要停止处理WM_NCPAINT并且玻璃会返回,但这似乎不适用于我自己的应用程序.

有没有办法干净地重置这个状态?我的代码是用C++编写的,住在这里:

http://bengoodger.dreamhosters.com/software/chrome/dwm/

#include <windows.h>
#include <dwmapi.h>

static const wchar_t* kWindowClass = L"BrokenGlassWindow";
static const wchar_t* kWindowTitle =
    L"BrokenGlass - Right click client area to toggle frame type.";
static const int kGlassBorderSize = 50;
static const int kNonGlassBorderSize = 40;

static bool g_glass = true;
bool IsGlass() {
  BOOL composition_enabled = …
Run Code Online (Sandbox Code Playgroud)

winapi nonclient aero dwm

10
推荐指数
1
解决办法
7950
查看次数

如何在非客户区域绘制?

我希望能够在窗口的非客户区域的菜单栏右侧进行绘图.

这可能,使用C++/MFC?

c++ mfc drawing nonclient

9
推荐指数
1
解决办法
1万
查看次数

德尔福:用类似windows 7的aero为vista绘制一个标题形式的文本

如何使用aero Like Windows 7在vista的标题栏中绘制文本(使用onClick事件)?

替代文字http://img529.imageshack.us/img529/3643/immaginembl.jpg

delphi.about.com上的示例无法在带有aero的Vista上运行.你有什么想法?

谢谢大家.

对不起,我的英语不好.

delphi nonclient aero

6
推荐指数
1
解决办法
6170
查看次数

Windows:鼠标按下窗口装饰

在几乎任何Windows应用程序中,我注意到在非客户区域中按住鼠标按钮会导致绘画停止.为什么需要这个?

例如,我有一个Managed Direct 3D应用程序,它显示一个旋转立方体.如果我将指针放在标题栏上并按住鼠标按钮,即使我没有将任何此类条件编码到循环中,立方体也会停止旋转.

为什么画停了?有什么好处?最重要的是,我该如何解决这个问题?

mouse winapi rendering nonclient

5
推荐指数
1
解决办法
652
查看次数

为非客户端鼠标离开调用_TrackMouseEvent时的Win32 ERROR_NOACCESS(C#)

我目前正在通过拦截各种WndProc消息并在非客户区绘制来编写某种自定义表单边框.要为关闭按钮等创建某种悬停效果,我需要跟踪鼠标指针.这很好用,但是要接收WM_NCMOUSELEAVE消息,我必须先调用_TrackMouseEvent,根据MSDN.

令人惊讶的是,它不起作用._TrackMouseEvent失败,Marshal.GetLastWin32Error()返回998(对内存位置的无效访问).

我很无能,所以这是我的代码:

class Native
{
    [DllImport("comctl32.dll", SetLastError = true)]
    public static extern bool _TrackMouseEvent(TRACKMOUSEEVENT tme);

    public struct TRACKMOUSEEVENT
    {
        public int cbSize;
        public int dwFlags;
        public IntPtr hwndTrack;
        public int dwHowerTime;
    }

    public const int TME_LEAVE = 0x00000002;
    public const int TME_NONCLIENT = 0x00000010;
}

private void ActivateLeaveTracking()
{
    Native.TRACKMOUSEEVENT tme = new Native.TRACKMOUSEEVENT();
    tme.hwndTrack = this.Handle;
    tme.dwHowerTime = 0;
    tme.dwFlags = Native.TME_LEAVE | Native.TME_NONCLIENT;
    tme.cbSize = Marshal.SizeOf(typeof(Native.TRACKMOUSEEVENT));
    if (!Native._TrackMouseEvent(tme))
    { …
Run Code Online (Sandbox Code Playgroud)

c# winapi nonclient mouseevent

0
推荐指数
1
解决办法
594
查看次数