Visual c++ 如何在visual c+中更改应用程序主窗口的边框样式+;win32 API 我在Visual C++(Win32 API)中有应用程序。在我的应用程序中,主窗口边框以旧窗口样式显示。我已经尝试将wndWc.style的值更改为WS_OVERLAPPED、WS_POPUP和WinUser.h中给出的其他值,但是主窗口的外观没有改变,因为我的所有弹出窗口都以windows 7样式显示,如何纠正这种情况。我们将非常感谢您在这方面提供的任何帮助。我已将图像附加到主窗口和弹出窗口。

Visual c++ 如何在visual c+中更改应用程序主窗口的边框样式+;win32 API 我在Visual C++(Win32 API)中有应用程序。在我的应用程序中,主窗口边框以旧窗口样式显示。我已经尝试将wndWc.style的值更改为WS_OVERLAPPED、WS_POPUP和WinUser.h中给出的其他值,但是主窗口的外观没有改变,因为我的所有弹出窗口都以windows 7样式显示,如何纠正这种情况。我们将非常感谢您在这方面提供的任何帮助。我已将图像附加到主窗口和弹出窗口。 ,visual-c++,winapi,Visual C++,Winapi,代码: // our window class WNDCLASS wndWc; // --------------------------------------------------------- // fill window class members // --------------------------------------------------------- wndWc.style = CS_GLOBALCLASS; wndWc.lpfnWndProc

代码:

// our window class
  WNDCLASS wndWc;
  // ---------------------------------------------------------
  // fill window class members
  // ---------------------------------------------------------
  wndWc.style = CS_GLOBALCLASS;
  wndWc.lpfnWndProc = (WNDPROC) WndProc;
  wndWc.cbClsExtra = 0;
  wndWc.cbWndExtra = 0;
  wndWc.hInstance = GetModuleHandle(NULL);
  wndWc.hIcon = NULL;
  wndWc.hCursor = LoadCursor(0, IDC_ARROW);
  wndWc.hbrBackground = (HBRUSH)GetStockObject(0);
  wndWc.lpszMenuName = NULL;
  wndWc.lpszClassName = "XYZ";


  // register class
  if (!RegisterClass(&wndWc)) return false;
  // ---------------------------------------------------------

  // get actual screen resolution
  int iSw = (WORD)GetSystemMetrics(SM_CXSCREEN);       // height
  int iSh = (WORD)GetSystemMetrics(SM_CYSCREEN);       // height

  // make a rectangle on the center of the screen
  RECT rc = {(iSw - iWidth)/2, (iSh - iHeight)/2, width, height};

  // create the window. the spaces on the window title
  // are just to make sure this will be visible when the region
  // is active. just run the app and you'll understand. =)
  hWnd = CreateWindow("XYZ", "XYZ",
                      WS_OVERLAPPEDWINDOW,
                      CW_USEDEFAULT,CW_USEDEFAULT, width,height,
                      NULL, NULL, GetModuleHandle(NULL), NULL);

如果你仔细看,你会发现这不仅仅是边界。“关闭”按钮也使用旧的视觉样式。因此,仅更改窗样式是不够的。你必须指出你的应用程序是Vista和Aero感知的

如果你仔细看,你会发现它不仅仅是边框。“关闭”按钮也使用旧的视觉样式。因此,仅更改窗样式是不够的。您必须指出您的应用程序是Vista和Aero感知的

可能是您的EXE已被标记为在兼容模式下运行,以适应以前的操作系统版本。右键单击EXE,选择“属性”,然后确保“兼容性”选项卡上的所有内容都已关闭。(特别是“禁用视觉主题”和“在兼容模式下运行此程序…”

如果不行

需要做任何事情都是不寻常的,但在应用程序开始时尝试以下操作:

(STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS)

如果不起作用,请尝试显式设置窗口的主题:

(hWnd,“窗口”,空)

FWIW,我将您的代码粘贴到一个新的VisualStudio2008项目中,该项目是使用“Win32 project”向导创建的,它带有Windows7边框。事实上,你通常不得不千方百计不去边境

您正在构建的EXE可能有一些不寻常的地方,比如EXE头中的标志设置不正确。e、 如果它没有指定它是一个Windows GUI应用程序,或者可能有一些版本字段


EXE的清单也可能起到一定作用,但我刚刚尝试完全删除清单,我的程序仍然有一个主题窗口,因此可能不是这样。

可能是您的EXE已被标记为在兼容模式下运行以前的操作系统版本。右键单击EXE,选择“属性”,然后确保“兼容性”选项卡上的所有内容都已关闭。(特别是“禁用视觉主题”和“在兼容模式下运行此程序…”

如果不行

需要做任何事情都是不寻常的,但在应用程序开始时尝试以下操作:

(STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS)

如果不起作用,请尝试显式设置窗口的主题:

(hWnd,“窗口”,空)

FWIW,我将您的代码粘贴到一个新的VisualStudio2008项目中,该项目是使用“Win32 project”向导创建的,它带有Windows7边框。事实上,你通常不得不千方百计不去边境

您正在构建的EXE可能有一些不寻常的地方,比如EXE头中的标志设置不正确。e、 如果它没有指定它是一个Windows GUI应用程序,或者可能有一些版本字段


EXE的清单也可能起到一定作用,但我只是尝试完全删除清单,我的程序仍然有一个主题窗口,所以可能不是这样。

最好发布一些代码,否则我们不知道如何帮助您。您所说的“旧windows风格”是什么意思?也许可以在某个地方放一个屏幕截图。根据到底出了什么问题,有一些不同的事情可能意味着什么。e、 g.它看起来像Win95窗口边框,还是像Vista/Win7边框但没有玻璃?或者别的什么?我附上了一些图片供参考。最好发一些代码,否则我们不知道如何帮助你。你说的“旧windows风格”是什么意思?也许可以在某处放一个屏幕截图。根据到底出了什么问题,有一些不同的事情可能意味着什么。e、 g.它看起来像Win95窗口边框,还是像Vista/Win7边框但没有玻璃?或者别的什么?我附上了一些图片供参考。谢谢你的回复,但是你能提供一个如何做到这一点的提示吗。许多枚举窗口样式本身就是组合样式,包括那些影响系统菜单和关闭、最大化和最小化按钮的样式。特别是
WS\u OVERLAPPEDWINDOW
。感谢您的回复,但您能否提供一个如何完成此操作的提示。许多枚举窗口样式本身是组合样式,包括影响系统菜单和关闭、最大化和最小化按钮的样式。具体地说,
WS\u OVERLAPPEDWINDOW
+1发布的代码对我来说很好,但是如果它仍然对您不起作用,这些是一些其他值得尝试的好建议。+1发布的代码对我来说很好,但是如果它仍然对您不起作用,这些是一些其他值得尝试的好建议。