0

WINAPI で、次のようなボタンを作成します。

case WM_CREATE:
{
    Start = CreateWindowEx(WS_EX_TRANSPARENT, "Button", "Start", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 20, 50, 75, 25, window, (HMENU)ID_START, hInstance, NULL);
            break;
}

ボタンは次のようになります。 ここに画像の説明を入力

しかし、次のようにする必要があります (これは .Net で行いました)。

ここに画像の説明を入力

その黒い境界線/背景を取り除くにはどうすればよいですか?

4

4 に答える 4

3
  Start = CreateWindowEx(WS_EX_TRANSPARENT, ...);

WS_EX_TRANSPARENT スタイル フラグを使用したため、黒いアウトラインが表示されます。なぜそれを使用したのかは明らかではありません。Button コントロールを使用するときにできることはあまりありません。それ以外の場合は、おそらく最も理解されていないスタイル フラグです。通常の外観のボタンを取得するには、代わりに 0 を渡します。

それ以外の場合、.NET ボタンの正確な外観を取得することは失われた原因であり、Winforms は組み込みの Button コントロールを使用しません。カスタムレンダラーを使用してグラデーションの外観を取得し、独自のレンダラーを作成します。そのネイティブ コードを再現するのは大変な作業です。

于 2012-12-27T20:24:45.837 に答える
0

編集:境界線をデフォルトボタンの境界線と誤認しました。David Hefferman が指摘したように、そうではありません。つまり、その境界効果を再現しました。プログラムの開始時に境界線はありませんが、左ボタンにマウスを少しだけ重ねると境界線が作成されます (少なくとも Windows 7 では)。

元の答えは次のとおりです。


黒い枠はデフォルトのためです。システムのデフォルト ボタンなどの視覚化に干渉するべきではありません。ユーザーはこれらの手がかりに依存しています。

フォントを変更するには、おそらく WM_SETFONT のように?

免責事項:私はそれを試していません。WM_CTRLCOLOR などを処理する必要があるかもしれません。試してみてください。最終的に、デフォルトのボタンではうまくいかない場合は、独自のボタンを実装してください。

于 2012-12-27T19:59:59.953 に答える
0

ボタンに「デフォルトボタン」プロパティがあるため、表示されている境界線があると思います。これをオフにすると、通常の境界線になります。Default プロパティは、ユーザーがダイアログ/フォームで Enter キーを押した場合にアクティブにするボタンを Win32 に指示するだけです。ボタンが 1 つしかない場合は、常にデフォルト プロパティが設定されます。秒を追加すると、そうではありません。

プロパティはBS_DEFPUSHBUTTONプロパティであるため、CreateWindowEx 呼び出しで次のようなことができるはずです。

Start = CreateWindowEx(WS_EX_TRANSPARENT, "Button", "Start", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | ~BS_DEFPUSHBUTTON, 20, 50, 75, 25, window, (HMENU)ID_START, hInstance, NULL);

そうでない場合は、ModifyStyleまたはModifyStyleExで設定し、「Remove」パラメーターに渡す必要があります。特定のスタイルを渡す必要があるものを忘れましたが、正しく思い出せば、EX パラメータではなく、通常のスタイル パラメータです。

于 2012-12-27T20:01:19.997 に答える
0

私はこれをテストしていませんが、次のようなボタンを作成してみてください:

Start = CreateWindowEx(0, WC_BUTTON, "Start", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_TEXT, 20, 50, 75, 25, window, (HMENU)ID_START, hInstance, NULL);
        break;

また、メイン ウィンドウの作成方法によっても異なる場合があります。メイン ウィンドウを作成するためのコードを投稿できますか?

于 2012-12-27T20:20:31.447 に答える