Как изменить стиль рамки главного окна приложения в Visual C ++ Win32 API - PullRequest
0 голосов
/ 26 ноября 2010

У меня есть приложение на Visual c ++ (Win32 API). В моем приложении граница главного окна отображается в стиле старых окон. Я попытался изменить значения wndWc.style на WS_OVERLAPPED, WS_POPUP и другие, которые приведены в WinUser.h, но нет никаких изменений во внешнем виде главного окна, поскольку все мои всплывающие окна отображаются в стиле Windows 7, как можно исправить. Любая помощь в этом отношении будет высоко оценена. Я приложил к изображениям главное окно и всплывающее окно. alt text

alt text

Код:

// 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);

Ответы [ 2 ]

3 голосов
/ 26 ноября 2010

Возможно, ваш EXE-файл помечен для запуска в режиме совместимости с предыдущей версией ОС.Щелкните правой кнопкой мыши на EXE, выберите «Свойства», затем убедитесь, что на вкладке «Совместимость» все отключено.(Особенно «Отключить визуальные темы» и «Запустить эту программу в режиме совместимости для ...»)

Если это не удастся ...

Это необычно - нужно что-то делать вообще, но попробуйтеэто в начале приложения:

SetThemeAppProperties (STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS)

Если это не сработает, попробуйте явно установить тему для своего окна:

SetWindowTheme (hWnd, "WINDOW", NULL);

FWIW, я вставил ваш код в новый проект Visual Studio 2008, созданный с помощью мастера "Проект Win32",и он вышел с границей Windows 7.На самом деле, чтобы получить границу, вам обычно нужно , а не .

В создаваемом вами EXE-файле может быть что-то необычное, например, флаг в заголовке EXE-файла.установить неправильно.Например, если в нем не указано, что это приложение с графическим интерфейсом Windows, или, возможно, есть некоторые поля версий ...

Манифест EXE также может сыграть свою роль, но я только что попытался полностью удалить манифест, и мойПрограмма все еще имеет тематическое окно, так что, вероятно, это не так.

1 голос
/ 26 ноября 2010

Если вы присмотритесь, вы увидите, что это не просто граница. Кнопка закрытия также использует старый визуальный стиль. Поэтому недостаточно изменить стиль окна. Вы должны указать, что ваше приложение поддерживает Vista и Aero

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...