削除アイコンはWindowsのタイトルバーなditchingりボタンまたはシステムメニューにたどり着けるのか!?

StackOverflow https://stackoverflow.com/questions/10059

質問

の開発をしているMFCアプリケーションっての検索方法のアイコンからタイトルバーが保持のボタンを押します。を明らかな解決案を感じることがあることをシステムメニューでスタイルのツール画面でスタイルが、私はあまり好きではないので無効にするシステムのメニューまたは利用の収縮ツールウィンドウタイトルバーがあります。多くのMFCアプリケーションこの機能がんワンダー:私は欠かの標準的な方法?

役に立ちましたか?

解決

利用できる WM_NCRBUTTONDOWN の検出を行えるようにした場合は右クリックし、ごキャプションとそのシステムメニューです。

他のヒント

セット WS_EX_DLGMODALFRAME 延長します。

を使用できる完全な透明性があります。

うつくのシステムメニューで、そういう場所yourseld(例えば次の閉じるボタンなど

なく、アイコンの思想のためのユーザーへのアクセスシステムメニューは右クリックのタイトルバー.

このかた、お取り扱うことができ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);
}

サンプルコードインを除去するアイコン:

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に位置しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top