5

C# を使用すると、必要な効果を簡単に得ることができました。

タイトルバーにアイコンがない標準ウィンドウ

ただし、C で Win32 API を使用して同じことを行うのに問題があります。アイコンが (まったく) ないウィンドウを作成する方法がわかりませんが、キャプション、最小化ボタン、閉じるボタンがあります。ボタン。

クラスを適切に登録しましたが、ウィンドウ スタイル/拡張ウィンドウ スタイルに何を配置すればよいかわかりません。

static const TCHAR lpctszTitle[] = TEXT("Stuff"), lpctszClass[] =
  TEXT("StuffClass");

HWND hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST, lpctszClass,
  lpctszTitle, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX,
  CW_USEDEFAULT, 0, 250, 55, NULL, NULL, hThisInstance, NULL);

上記のコードは次のように生成されます。

タイトルバーにアイコンがある標準ウィンドウ

タイトルバーにまだアイコンがあり、私が望んでいたものではありません。

4

2 に答える 2

7

標準ウィンドウにはアイコンが必要です。これは、画面下部のタスクバーになんらかの形で表示する必要があるためです。メイン ウィンドウの 1 つにアイコンがない場合、ウィンドウ スイッチャーでAlt+を押すと何が表示されますか?Tab

WS_EX_DLGMODALFRAME拡張スタイルを指定する必要があります。これは、タイトル バーのアイコンをオフにしたときに WinForms が設定するのと同じ効果です。

また、ウィンドウ クラスを登録するときにアイコンを指定しないようにする必要があります。hIcon構造体のおよびhIconSmフィールドWNDCLASSEXを 0に設定する必要があります。

コードを次のように変更します。

static const TCHAR lpctszTitle[] = TEXT("Stuff"), lpctszClass[] =
  TEXT("StuffClass");

HWND hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST, lpctszClass,
  lpctszTitle, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX,
  CW_USEDEFAULT, 0, 250, 55, NULL, NULL, hThisInstance, NULL);
于 2011-02-05T06:30:19.650 に答える
2

ちなみに、Spy++ または他の同様のツールを使用して、特定の HWND が実際に使用するスタイルを確認してください。それを C# ウィンドウに向けてから、報告されたスタイルを C コードに複製します。

于 2011-02-05T08:32:06.477 に答える