我试图改变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) 我正在使用Windows常用控件CHOOSECOLOR对话框,但在Win 7上,它像拇指一样伸出,因为它仍然使用"旧"Tahoma字体.

是否有一种相当简单的方法来使用Segoe UI或其他字体?
如果重要,我正在使用Delphi/C++ Builder ......
我正在尝试将此库集成到我的应用程序中.
起初它崩溃了
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功能区.
我该如何解决这个错误?
我正在创建带有子对话框作为页面的选项卡控件.
我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) 这里(或多或少)是一个相关的问题: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) 我的程序在应用程序中使用气球通知气泡来引导用户,在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) 一个应该在本地运行时使用双缓冲,但是当窗口在远程会话时不使用双缓冲,如果想要获得每个模式的最佳性能.
ListView控件具有扩展样式,LVS_EX_DOUBLEBUFFER它自动双重缓冲ListView的内容.
是否需要注册以通知本地和远程会话之间的更改,并相应地更新此标志?或者ListView会自动执行此操作吗?
我创建了一个包含以下样式的工具栏:
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) 我有一个应用程序,我一直在测试国际化支持.
例如,有一个标准的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也没有问题,如下图所示进行测试:

人们对此做了什么?
Windows XP上的预期平台行为是什么?您是否必须找到用户想要使用的语言,然后找一个要使用的字体,支持该语言?我猜Arial Unicode MS可能是一个很好的默认值,因为它几乎拥有所有的unicode语言.
更新:看起来微软的术语"补充语言支持"指的是Windows的"窗口不显示我的unicode字符作为框"功能.
windows delphi windows-xp internationalization common-controls
我遇到了一个问题,我通常无法改变其属性的背景颜色(例如clwhite).我在Delphi方面不是很有经验,我找到了两种可能的解决方案,但我仍然想知道,如何正确地改变它或为什么它不可能.TToolBarToolBar.Color
1)将样式更改为渐变,但它也会更改按钮的基本动画.
ToolBar.DrawingStyle := dsGradient
ToolBar.GradientStartColor := clWhite
ToolBar.GradientEndColor := clWhite
Run Code Online (Sandbox Code Playgroud)
2)将TToolBar内TPanel使用以下设置.
Panel.Color := clwhite
ToolBar.Parent := Panel
ToolBar.Align := alClient
ToolBar.Transparent := True
Run Code Online (Sandbox Code Playgroud) 我正在使用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) 这是我的代码,但它不编译并给出两个错误:
error C2440: '=' : cannot convert from 'WCHAR' to 'WCHAR [2084]'
IntelliSense: expression must be a modifiable lvalue
Run Code Online (Sandbox Code Playgroud)
我有下面的阅读链接,但它没有帮助我:
[代码]:
#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) 我为编辑和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.
提前致谢.
common-controls ×13
winapi ×6
delphi ×5
c++ ×4
windows ×4
c# ×2
listview ×2
.net-4.0 ×1
c ×1
colordialog ×1
delphi-5 ×1
delphi-7 ×1
delphi-xe6 ×1
gdi ×1
imagelist ×1
manifest ×1
mfc ×1
richedit ×1
subclassing ×1
tabs ×1
visual-c++ ×1
windows-xp ×1
winforms ×1
wpf ×1