标签: common-controls

当LineTo成功时,为什么FillRect不会绘制?

我试图改变DateTimePicker的背景颜色,但我的问题与我正在尝试做的无关.

我正在捕捉一个窗口的WM_PAINT消息,让默认的绘图实现发生(即ComCtrl.dll中的一个),然后在此之后出现并在其上面涂鸦.

最初我的代码很简单:

TDateTimePicker = class(Vcl.ComCtrls.TDateTimePicker)
protected
   procedure WMPaint(var Message: TMessage); message WM_PAINT;
end;

procedure TDateTimePicker.WMPaint(var Message: TMessage);
begin
   inherited;
end;
Run Code Online (Sandbox Code Playgroud)

我什么都不做,控件正常涂漆:

在此输入图像描述

现在开始变得有趣了

现在我将进行一些实际绘图.这不是我想要的图画,但它表明它有效.我将在控件的矩形上绘制纵横交错:

procedure TDateTimePicker.WMPaint(var Message: TMessage);
var
    dc: HDC;
    rc: TRect;
    p: HPEN;
begin
    inherited;

    //Get the device context to scribble on    
    dc := GetDC(Self.Handle);
    if dc = 0 then
        Exit;
    try
        rc := Self.GetClientRect;

        //Create a pen to draw a criss-cross
        p := CreatePen(PS_SOLID, 0, ColorToRGB(clLime));
        p …
Run Code Online (Sandbox Code Playgroud)

delphi winapi gdi common-controls delphi-xe6

8
推荐指数
1
解决办法
800
查看次数

在CHOOSECOLOR对话框中更改字体

我正在使用Windows常用控件CHOOSECOLOR对话框,但在Win 7上,它像拇指一样伸出,因为它仍然使用"旧"Tahoma字体.

选择颜色对话框

是否有一种相当简单的方法来使用Segoe UI或其他字体?

如果重要,我正在使用Delphi/C++ Builder ......

windows delphi colordialog common-controls

7
推荐指数
1
解决办法
401
查看次数

找不到文件'Microsoft.Windows.Common-Controls,Version = 6.0.0.0,Culture =*,PublicKeyToken = 6595b64144ccf1df,

我正在尝试将此库集成到我的应用程序中.

起初它崩溃了

Unable to find an entry point named 'TaskDialogIndirect' in DLL 'ComCtl32'.
Run Code Online (Sandbox Code Playgroud)

所以我没有注释

<dependentAssembly>
  <assemblyIdentity
      type="win32"
      name="Microsoft.Windows.Common-Controls"
      version="6.0.0.0"
      processorArchitecture="*"
      publicKeyToken="6595b64144ccf1df"
      language="*"
    />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

正如这里推荐的那样.

现在应用程序将无法使用以下消息进行编译:

Could not find file 'Microsoft.Windows.Common-Controls, Version=6.0.0.0, Culture=*, 
    PublicKeyToken=6595b64144ccf1df, ProcessorArchitecture=*, Type=win32'
Run Code Online (Sandbox Code Playgroud)

删除app.manifest会导致应用崩溃,因为我正在使用Microsoft功能区.

我该如何解决这个错误?

c# wpf manifest common-controls

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

调整窗口大小时,常用控件未正确绘制

介绍:

我正在创建带有子对话框作为页面的选项卡控件.

Visual Styles通过#pragma评论启用了.我也呼吁InitCommonControlsEx,并#pragma comment( lib, "comctl32.lib" )为好.

最初,当窗口加载,对话框及其常用控件具有适当的背景时,请参见下图:

在此输入图像描述

在调整大小期间,事情并不那么一致 - >背景开始明显不匹配.我将在下面提供截图:

在此输入图像描述

你可以清楚地看到checkbox并且static control有不正确的背景,而在我看来dialog box(创建充当儿童控制)具有适当的背景.

2014年11月24日编辑:

封闭控件后group boxes,似乎没有绘画问题.我的显示器是旧的CRT(三星SyncMaster 753s),我的视力不好,但同样,似乎一切都画得很好.窗口仍然在调整大小时可怕地闪烁,但我已经尝试了一切能力来修复它.

题:

我怎样才能解决这个问题?

我努力解决这个问题:

我还没有找到任何东西,但我在输入这个问题时仍然是Goggling ...

相关信息:

以下是创建说明问题的演示的说明:

1.)创建空C++项目Visual Studio;

2.)添加头文件,命名pomocne_funkcije.h并复制/粘贴以下内容:

#include <windows.h>
#include <windowsx.h>
#include <comutil.h>
#include <commctrl.h>
#include <stdio.h>
#include <vector>
#include <ole2.h>
#include <string>
#include <stdlib.h>
#include <locale.h>
#include <Uxtheme.h>

#pragma comment( linker, "/manifestdependency:\"type='win32' \ …
Run Code Online (Sandbox Code Playgroud)

c++ winapi tabs visual-styles common-controls

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

带有alpha混合图标的图像列表失去透明度

这里(或多或少)是一个相关的问题:Delphi - 在运行时使用图标填充图像列表'破坏'透明度.

我测试了@TOndrej的答案.但似乎我需要启用视觉样式(XP Manifest)才能工作(将使用版本6.0的Windows常用控件 - 我现在不想要).我通过ExtractIconEx和运行时添加图标ImageList_AddIcon.

显然,设置ImageList.Handle使用系统图像列表手柄,并不需要XP清单.因此,当我使用系统图像列表显示文件列表(带有a TListView)时,即使是我在D3中写回的旧程序也正确显示alpha混合图标.

我在徘徊系统图像列表有什么特别之处以及它是如何创建的,所以它在所有情况下都支持alpha混合?我无法弄明白.以下是一些示例代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ImgList, StdCtrls, ShellAPI, ExtCtrls, Commctrl;

type
  TForm1 = class(TForm)
    ImageList1: TImageList;
    PopupMenu1: TPopupMenu;
    MenuItem1: TMenuItem;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    FileName: string;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
// {$R WindowsXP.res} …
Run Code Online (Sandbox Code Playgroud)

delphi imagelist delphi-7 delphi-5 common-controls

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

Windows Server 2008中没有气球工具提示关闭按钮

我的程序在应用程序中使用气球通知气泡来引导用户,在Windows XP中,气球窗口在右上角几乎没有'X',以便在单击时关闭窗口,如果单击其中的任何位置,窗口也会关闭,即使你不要点击'X'.

但是,当程序在Windows Server 2008上运行时,气球会出现,但没有"X"按钮,当我点击它们时也不会关闭.

偶然我设法通过删除包含以下内容的.MANIFEST文件来复制Windows XP中的行为:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity version="2.0.0.0" processorArchitecture="x86" name="SofrwareName" type="win32" />
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="<Removed>" language="*" processorArchitecture="x86" />
        </dependentAssembly>
    </dependency>
</assembly>
Run Code Online (Sandbox Code Playgroud)

当我删除此清单并在Windows XP中运行我的程序时,气球的行为就像它在Windows Server 2008中一样.我假设这可能意味着某种与Windows Server 2008中的Common Controls v6不兼容.

有没有人知道什么可能导致气球不能在点击时关闭并且没有'X'关闭按钮?

更新:这是气球创建代码:

m_tool = new MessageTool(); //internal class MessageTool : NativeWindow {...}

CreateParams cp = new CreateParams();
cp.ClassName = TOOLTIPS_CLASS; //TOOLTIPS_CLASS = "tooltips_class32";
cp.Style =
    WS_POPUP |
    TTS_BALLOON |
    TTS_NOPREFIX |
    TTS_ALWAYSTIP |
    TTS_CLOSE;

m_ti = new TOOLINFO(); …
Run Code Online (Sandbox Code Playgroud)

c# notifications .net-4.0 winforms common-controls

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

在远程会话上运行时,LVS_EX_DOUBLEBUFFER是否正确不是双缓冲区?

一个应该在本地运行时使用双缓冲,但是当窗口在远程会话时不使用双缓冲,如果想要获得每个模式的最佳性能.

ListView控件具有扩展样式,LVS_EX_DOUBLEBUFFER它自动双重缓冲ListView的内容.

是否需要注册以通知本地和远程会话之间的更改,并相应地更新此标志?或者ListView会自动执行此操作吗?

c++ windows listview doublebuffered common-controls

4
推荐指数
1
解决办法
1717
查看次数

如何获得使用BTNS_AUTOSIZE样式创建的工具栏按钮的实际大小?

我创建了一个包含以下样式的工具栏:

DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS
                | CCS_NODIVIDER | CCS_NOPARENTALIGN | CCS_NORESIZE
                | TBSTYLE_FLAT | TBSTYLE_LIST;
Run Code Online (Sandbox Code Playgroud)

然后我用纯文本按钮填充工具栏:

bool InsertButton(int Index, int CmdId, BYTE Style, BYTE State,
                  int TxtIdx, DWORD_PTR lParam)
{
    TBBUTTON tbb = { 0 };
    tbb.idCommand = CmdId;
    tbb.fsStyle = Style;    // == BTNS_AUTOSIZE | BTNS_DROPDOWN
    tbb.fsState = State;
    tbb.iBitmap = I_IMAGENONE;
    tbb.iString = TxtIdx;
    tbb.dwData = lParam;

    return (bool)CToolBarCtrl::InsertButton(Index, &tbb);
}
Run Code Online (Sandbox Code Playgroud)

填充工具栏后,我想获得其按钮的实际大小.但GetButtonInfo返回零大小.

int GetBtnSize(int Idx) const
{
    TBBUTTONINFO tbbi = { sizeof(tbbi), …
Run Code Online (Sandbox Code Playgroud)

windows winapi mfc visual-c++ common-controls

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

如何获得完整的unicode支持,包括VCL控件中的中文字符或XP上的Windows公共控件,就像在Win7中一样

我有一个应用程序,我一直在测试国际化支持.

例如,有一个标准的TEdit控件,其中font.Name ='Arial'.

在Windows 7上,如果分配给该控件的字体不包含某个国际字符,它似乎会自动从Arial Unicode MS或其他地方获取CJK字符的字形,用于EDIT公共控件.

在Windows XP上,即使安装了Arial Unicode MS字体,中文字符似乎也显示为框,除非我将delphi格式的字体名称更改为Arial Unicode MS.

这是每个人在Windows XP上遇到国际字体支持的东西吗?Windows常用控件的行为有何不同?我在Windows 7上看到的行为肯定比我在Windows XP上看到的行为更友好.

此行为差异不仅限于Windows公共控件.看起来即使Internet Explorer和MS Explorer shell也没有问题,如下图所示进行测试: 在此输入图像描述

  1. 人们对此做了什么?

  2. Windows XP上的预期平台行为是什么?您是否必须找到用户想要使用的语言,然后找一个要使用的字体,支持该语言?我猜Arial Unicode MS可能是一个很好的默认值,因为它几乎拥有所有的unicode语言.

更新:看起来微软的术语"补充语言支持"指的是Windows的"窗口不显示我的unicode字符作为框"功能.

windows delphi windows-xp internationalization common-controls

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

更改TToolBar背景颜色

我遇到了一个问题,我通常无法改变其属性的背景颜色(例如clwhite).我在Delphi方面不是很有经验,我找到了两种可能的解决方案,但我仍然想知道,如何正确地改变它或为什么它不可能.TToolBarToolBar.Color

1)将样式更改为渐变,但它也会更改按钮的基本动画.

ToolBar.DrawingStyle := dsGradient
ToolBar.GradientStartColor := clWhite
ToolBar.GradientEndColor := clWhite
Run Code Online (Sandbox Code Playgroud)

2)将TToolBarTPanel使用以下设置.

Panel.Color := clwhite
ToolBar.Parent := Panel
ToolBar.Align := alClient
ToolBar.Transparent := True
Run Code Online (Sandbox Code Playgroud)

delphi common-controls

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

单选Win32 ListView(通用控件)

我正在使用C++中Common Controls 6.0的ListView控件,我需要ListView才能单选.

所有更高级别的控件都具有此功能(例如.Net和Qt),但我认为它们是基于此控制的某个地方.关于如何使其成为单选列表的任何想法?


为了防止它产生影响,这是我当前的create语句:

list = ::CreateWindowExW(
    0,
    WC_LISTVIEWW,
    NULL,
    WS_VISIBLE | WS_CHILD | WS_BORDER | LVS_SHOWSELALWAYS | LVS_REPORT | LVS_OWNERDATA,
    0,
    0,
    250,
    400,
    parentWindow,
    NULL,
    NULL,
    NULL
);
Run Code Online (Sandbox Code Playgroud)

c++ winapi listview common-controls

2
推荐指数
1
解决办法
2695
查看次数

无法在C++ Win32中为SysLink设置URL或ID

这是我的代码,但它不编译并给出两个错误:

error C2440: '=' : cannot convert from 'WCHAR' to 'WCHAR [2084]'     
IntelliSense: expression must be a modifiable lvalue    
Run Code Online (Sandbox Code Playgroud)

我有下面的阅读链接,但它没有帮助我:

错误C2106:'=':左操作数必须是l值

[代码]:

#define ID_SysLink 500              
HWND hWnd;

LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg)
{
case WM_CREATE:
    {
        HWND syslink_handle=0;
        syslink_handle=CreateWindowEx(0, WC_LINK, L"test syslink",  WS_VISIBLE | WS_CHILD , 10, 10, 100, 30, hWnd, HMENU(ID_SysLink), 0, 0);

        LITEM *pitem = 0;
        pitem->iLink = 0; 
        pitem->mask = LIF_ITEMINDEX | LIF_ITEMID | LIF_URL | LIF_STATE;
        pitem->state = …
Run Code Online (Sandbox Code Playgroud)

c++ winapi common-controls

2
推荐指数
1
解决办法
300
查看次数

使用GWL_WNDPROC子类化richedit的问题

我为编辑和richedit做了这个确切的事情但是对于后者存在访问冲突,为什么?当tabctrl完成时也会发生同样的事情.我究竟做错了什么?我怎样才能让它发挥作用?

WNDPROC OriginalProc;

LRESULT CALLBACK MyProc(HWND h, UINT m, WPARAM w, LPARAM p)
{
return OriginalProc (h, m, w, p);// access violation for common controls
}

// elsewhere 
HWND h = CreateWindow(....)
OriginalProc = (WNDPROC)SetWindowLong(h, GWL_WNDPROC, (LONG)MyProc);
Run Code Online (Sandbox Code Playgroud)

我正在使用vc ++ 6.

提前致谢.

c winapi richedit subclassing common-controls

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