相关疑难解决方法(0)

哪个字体是MFC对话框控件的默认值?

下面的图片(放大,因此您最好看到差异)显示动态创建的编辑控件(上面的两个示例)和从对话框编辑器(下面的示例)创建的编辑控件之间的字体差异.如何使我动态创建的CEdit控件的字体看起来像默认(下面的示例)?

在此输入图像描述

我创建了CEdit控件,如下所示:

obj->CreateEx(WS_EX_CLIENTEDGE, _T("EDIT"), _T(""),
              WS_CHILD | WS_VISIBLE | WS_TABSTOP,
              rect.left, rect.top, rect.Width(), rect.Height(),
              GetSafeHwnd(), reinterpret_cast<HMENU>(mId));

obj->SetFont(&mFont); // mFont was created in the Dialog Constructor
                      // with mFont.CreatePointFont(80, _T("MS Shell Dlg"));
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

windows winapi mfc visual-studio-2008 visual-studio

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

使对话框与"大字体"兼容.

您认为哪种最佳做法是使Windows对话框兼容标准字体(96 dpi)和"大字体"设置(120 dpi),以便对象不会重叠或被切断?

顺便说一句:万一它是相关的,我有兴趣为Delphi对话框做这个.

提前致谢!

delphi dialog font-size pixel-fonts

35
推荐指数
2
解决办法
2613
查看次数

如何在不遭受别名的情况下从资源加载图标?

我有一个GUI应用程序,其中包括用于工具栏按钮,菜单标志符号,通知图标等的许多图标.这些图标作为资源链接到应用程序,并且可以使用各种不同的大小.通常,对于工具栏按钮图像,我有16px,24px和32px版本.我的图标是32bpp,具有部分透明度.

该应用程序具有高DPI感知能力,可根据主流字体缩放调整所有可视元素的大小.因此,例如,在100%字体缩放,96dpi时,工具栏图标大小为16px.在125%缩放,120dpi时,工具栏图标大小为20px.我需要能够加载大小为20px的图标而不会产生任何混叠效果.我怎样才能做到这一点?请注意,我想支持Windows 2000及更高版本.

windows delphi winapi

28
推荐指数
1
解决办法
3985
查看次数

在Delphi中获取自定义DPI百分比

在Windows 7的高DPI模式下尝试使用我的Delphi 2010应用程序更多用户我已经尝试了几种方法来检索PixelsPerInch并与96进行比较.唉,无论我尝试什么,我总是得到96.我的问题是:

  1. 获得自定义DPI模式的最佳做法是什么?
  2. 事实上,无论我的意义是什么,我都会得到一个恒定的96,这意味着我错过了什么?

这是我尝试过的

dpiX := Form1.PixelsPerInch
Run Code Online (Sandbox Code Playgroud)

dpiX := Screen.PixelsPerInch
Run Code Online (Sandbox Code Playgroud)

最后:

D2DFactoryOptions.DebugLevel := D2D1_DEBUG_LEVEL_NONE;
pD2DFactoryOptions := @D2DFactoryOptions;
if D2D1CreateFactory(
    D2D1_FACTORY_TYPE_SINGLE_THREADED,
    IID_ID2D1Factory,
    PD2DFactoryOptions,
    D2DFactory
    ) <> S_OK then exit;
D2DFactory.GetDesktopDpi(dpiX, dpiY)
Run Code Online (Sandbox Code Playgroud)

小心猜?这是正确的dpiX是100%,125%和150%的常数96

请指教.

delphi screen-resolution windows-7

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

如何从无模式窗体中显示模态对话框?

我有两种"无模式"形式:

  • 一个是特殊的MainForm
  • 另一种是无模式

在此输入图像描述

你可以看到:

  • 两者都存在于任务栏上
  • 两者都有一个任务栏按钮
  • 两者都可以独立最小化
  • 两者都可以独立恢复
  • 两者都不总是在另一方的顶层(拥有)

现在显示一个模态形式

从这种无模式的形式,我想展示一个模态:

在此输入图像描述

模态形式被构造为:

var
    frmExchangeConfirm: TfrmExchangeConfirm;
begin
    frmExchangeConfirm := TfrmExchangeConfirm.Create(Application);
    try
        //Setting popupMode and popupParent still makes the MainForm disabled
//      frmExchangeConfirm.PopupMode := pmExplicit;
//      frmExchangeConfirm.PopupParent := Self; //owned by us

        frmExchangeConfirm.OwnerForm := Self; //tell the form which owner to use
        frmExchangeConfirm.ShowModal;
    finally
        frmExchangeConfirm.Free;
    end;
Run Code Online (Sandbox Code Playgroud)

模态表单被告知通过新OwnerForm属性使用哪个所有者:

protected
   procedure SetOwnerForm(const Value: TForm);
public
   property OwnerForm: TForm read GetOwnerForm write SetOwnerForm;
end;
Run Code Online (Sandbox Code Playgroud)

这迫使手柄娱乐:

procedure TfrmExchangeConfirm.SetOwnerForm(const Value: …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe6

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

Delphi 3报告的屏幕宽度和高度不正确

我有一个Delphi 3应用程序,已经广泛分发至少十年.今天我收到一份报告称该应用程序在华硕Transformer T100TA-C1-GR(S)Windows 8平板电脑上无法正常运行.具体来说,该应用程序拒绝运行,因为它检测到的屏幕分辨率太小,无法让应用程序正确显示自己.在应用程序中,我有以下条件检查:

 if (Screen.Width < 800) or (Screen.Height < 600) then begin
    // display a message reporting screen resolution too low
    ShowMessage('blah blah...');
    Application.Terminate;
Run Code Online (Sandbox Code Playgroud)

当我编译我的应用程序的特殊版本以帮助调试问题,并将应用程序提供给抱怨用户时,他们会报告以下数字:

    Width: 980
    Height: 550
Run Code Online (Sandbox Code Playgroud)

这是我添加了特殊编译的额外代码,然后我给用户:

 ShowMessage('Width: ' + IntToStr(Screen.Width) + #13#10 +
    'Height: ' + IntToStr(Screen.Height));
Run Code Online (Sandbox Code Playgroud)

但是,用户发誓他们的平板电脑配置为1368x768.他们甚至切换到1024x768并且Delphi报告了相同的错误数字.

所有TForm.Scaled属性都设置为False.

一条可能有帮助的线索......屏幕宽度和高度检测代码(上图)在以下过程中运行:

 procedure TForm1.WMDisaplayChange(var m: TWMDisplayChange);
Run Code Online (Sandbox Code Playgroud)

知道可能会发生什么吗?

delphi

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