Сведения о вопросе

HOLY

18:12, 2nd August, 2020

Теги

c++   windows   user-interface   mfc    

Удаление значка из заголовков Windows без нажатия кнопки закрытия или системного меню?

Просмотров: 495   Ответов: 6

Я разрабатываю приложение MFC, и недавно я искал хороший способ удалить значок из строки заголовка Windows,но сохранить кнопку закрытия. Два очевидных решения-кандидата отключают стиль системного меню или используют стиль окна инструментов, но я бы предпочел не отключать системное меню или использовать сокращенную строку заголовка окна инструментов. Многие приложения MFC имеют эту функциональность, поэтому я задаюсь вопросом: мне не хватает какого-то стандартного способа сделать это?



  Сведения об ответе

DO__IT

23:31, 12th August, 2020

Установите WS_EX_DLGMODALFRAME расширенный стиль.


  Сведения об ответе

COOL

07:43, 4th August, 2020

Вы можете использовать полностью прозрачный значок.


  Сведения об ответе

SILA

07:24, 4th August, 2020

Вы можете использовать WM_NCRBUTTONDOWN , чтобы определить, щелкнул ли пользователь правой кнопкой мыши на вашем заголовке, а затем вызвать системное меню.


  Сведения об ответе

PROGA

12:57, 27th August, 2020

Без значка единственный способ, который я мог себе представить для пользователей, чтобы получить доступ к системному меню, - это щелкнуть правой кнопкой мыши на заголовке.

Если это то, что вы имели в виду, вы могли бы обработать WM_RBUTTONDOWN на вашем главном фрейме, а затем вычислить, если правый клик был на заголовке.

int clickX = GET_X_LPARAM(lParam);
int clickY = GET_Y_LPARAM(lParam);

CRect frameRect;
mainFrame.GetWindowRect(&frameRect);

int titleBarHeight = GetSystemMetrics(SM_CYCAPTION);

if (clickX >= frameRect.left &&
    clickX <= frameRect.right &&
    clickY >= frameRect.top &&
    clickY <= frameRect.top + titleBarHeight)
{
   TrackPopupMenu(m_systemMenu);
}


  Сведения об ответе

JUST___

19:28, 19th August, 2020

как насчет того, чтобы избавиться от системного меню, а затем положить его обратно в другое место самостоятельно (скажем, рядом с кнопкой закрытия и т. д.)?


  Сведения об ответе

lesha

21:18, 1st August, 2020

Пример кода, в Delphi который удаляет значок:

const
  WM_ResetIcon = WM_APP - 1;

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
  protected
    procedure WMResetIcon(var Message: TMessage); message WM_ResetIcon;
  end;

implementation

procedure TForm1.FormShow(Sender: TObject);
begin
  PostMessage(Handle, WM_ResetIcon, 0, 0);
end;

procedure TForm1.WMResetIcon(var Message: TMessage);
const
  ICON_SMALL = 0;
  ICON_BIG   = 1;
begin
  DestroyIcon(SendMessage(Handle, WM_SETICON, ICON_BIG, 0));
  DestroyIcon(SendMessage(Handle, WM_SETICON, ICON_SMALL, 0));
end;

Аналогичный код должен работать для MFC. В принципе, вам просто нужно WM_SETICON к NULL в нужном месте.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться