标签: createparams

在Windows窗体应用程序中闪烁

我有一个应用程序,它有很多控件.并且它有大量的闪烁,特别是在启动时.

我将此修复程序应用于它.

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x02000000;   // WS_EX_COMPOSITED
            return cp;
        }
    } 
Run Code Online (Sandbox Code Playgroud)

这很有效 - 闪烁的数量减少了令人难以置信的数量.但是,副作用是当我将鼠标移动或单击它们时,窗口右上角的最小化,最大化和关闭按钮不会生成动画(尽管它们仍在工作).这给了应用程序一种感觉.

如何在保留最大化,最小化和关闭按钮的可用性的同时保留WS_EX_COMPOSITED?

这种情况发生在Windows XP上.正如@fallenidol所指出的,这不是Windows 7上的问题.

c# flicker winforms createparams

22
推荐指数
2
解决办法
2万
查看次数

更改TCreateParams.WinClassName或如何查找另一个自己的应用程序的表单句柄是否安全?

我有两个应用程序,其中第一个需要找到第二个(也是我自己),但不同的应用程序(不实例,但不同的应用程序)形式的手柄.我已经看过一些技巧,但我想知道我想做什么或者有效的方法是否安全.

我正在考虑使用FindWindow你可以传递类名的函数,所以如果我将表单中的WinClassName成员更改CreateParams为某个唯一值(例如GUID),那么我很容易找到一个大的窗口很有可能它是我申请的那个.

需要找到其形式的应用程序:

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.WinClassName := '{1EE65C52-2F4B-4600-AAE2-079C29AD2220}';
end;
Run Code Online (Sandbox Code Playgroud)

另一个需要找到前一个表单的应用程序:

procedure TForm1.Button1Click(Sender: TObject);
var
  FormHandle: HWND;
begin
  FormHandle := FindWindow('{1EE65C52-2F4B-4600-AAE2-079C29AD2220}', nil);
  ShowMessage(IntToStr(FormHandle));
end;
Run Code Online (Sandbox Code Playgroud)

我的问题是:

将这个成员更改TCreateParams为我想要的或者在某些事情上是不安全的是否安全?或者,您如何从自己的另一个应用程序(不是应用程序实例,而是您自己的另一个应用程序)中查找表单的句柄?

非常感谢!

delphi winapi classname findwindow createparams

3
推荐指数
1
解决办法
863
查看次数

标签 统计

createparams ×2

c# ×1

classname ×1

delphi ×1

findwindow ×1

flicker ×1

winapi ×1

winforms ×1