gpt4 book ai didi

winapi - 基于 Win32 对话框的无边框窗口,具有位图背景和视觉样式

转载 作者:行者123 更新时间:2023-12-03 09:25:39 27 4
gpt4 key购买 nike

我是 StackOverflow 的新手,所以请原谅我在帖子中犯下的任何愚蠢错误。

我在使用 Win32 API(无 MFC)和基于对话框的应用程序创建具有位图背景的无边框窗口时遇到问题。我使用的是 Visual Studio 2010。

仅当我使用 Windows XP 视觉样式时,通过将公共(public)控件库与以下代码片段链接,才会出现此问题:

  #pragma comment(linker, \
"\"/manifestdependency:type='Win32' "\
"name='Microsoft.Windows.Common-Controls' "\
"version='6.0.0.0' "\
"processorArchitecture='*' "\
"publicKeyToken='6595b64144ccf1df' "\
"language='*'\"")

我有一个简单的对话框,里面有一个带有位图图像的 PictureControl,该图像将作为窗口的背景。我希望此图像填充整个窗口,不需要调整大小或拖放,因此我只需将其放在屏幕中央,并在我的 RC 文件中将对话框和优化校准尺寸定义为相同,如下所示(尺寸均为 356、210):

//Main Dialog
IDD_DIALOG_MAIN DIALOGEX 0, 0, 356, 210
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
//Picture Control
CONTROL 103,IDC_PB_SPLASH,"Static",SS_BITMAP | SS_CENTERIMAGE | SS_REALSIZEIMAGE,0,0,356,210
DEFPUSHBUTTON "OK",IDOK,152,169,50,14
END

现在的问题是,当我使用视觉样式时,图像没有填充对话框窗口的整个区域。对话框的两侧都可以看到一个小空白(如果删除 SS_CENTERIMAGE,则右侧会出现一个空白)。如果没有视觉样式,这种情况就不会发生。下面的图片显示了问题(那里使用的图像只是一个示例,实际的背景图像更复杂,所以仅仅用画笔绘画是不可行的)

没有视觉风格 http://postimg.org/image/hji8sa6j1/

具有视觉风格 http://postimg.org/image/b733ig3gt/

抱歉提供了这些链接,但仍然没有足够的声誉来发布图像。

关于如何在启用视觉样式的情况下使位图填充整个窗口有什么建议吗?我找到了这个很好的答案https://stackoverflow.com/a/17713810/3022281由 melak47 制作一个无边框窗口,但它不是基于对话框的。如果没有其他办法,我想我将不得不采用该解决方案。

最佳答案

不要使用图片控件。直接在对话框上绘制:

BOOL CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){
HDC hdc;
RECT rt;

switch (message){
case WM_PAINT:
GetWindowRect(hDlg, &rt);
hdc = GetWindowDC(hDlg);
StretchBlt(hdc, 0, 0, rt.right, rt.bottom, hdcMemBitmap, 0, 0, width, height, SRCCOPY);
ReleaseDc(hDlg, hdc);
break;
default: //for messages that we don't deal with
return false;
}

return false;
}

宽度高度用于位图宽度和高度

瓦尔特

关于winapi - 基于 Win32 对话框的无边框窗口,具有位图背景和视觉样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21940575/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com