2

私はStackOverflowを初めて使用するので、投稿で愚かな間違いを犯したことを許してください。

Win32 API (MFC なし) とダイアログ ベースのアプリケーションを使用して、ビットマップ背景のボーダレス ウィンドウを作成する際に問題が発生しています。ビジュアルスタジオ2010を使用しています。

この問題は、共通コントロール ライブラリを次のスニペットにリンクすることにより、Windows XP Visual Styles を使用する場合にのみ発生します。

  #pragma comment(linker, \
  "\"/manifestdependency:type='Win32' "\
  "name='Microsoft.Windows.Common-Controls' "\
  "version='6.0.0.0' "\
  "processorArchitecture='*' "\
  "publicKeyToken='6595b64144ccf1df' "\
  "language='*'\"")

シンプルなダイアログがあり、その中にウィンドウの背景になるビットマップ画像を持つ PictureControl があります。この画像をウィンドウ全体に表示したいのですが、サイズ変更やドラッグ アンド ドロップは不要なので、画面の中央に配置し、以下に示すように、ダイアログと画像コントロールの両方の寸法が RC ファイルで同じになるように定義しました (寸法 356、210 の両方):

//Main Dialog
IDD_DIALOG_MAIN DIALOGEX 0, 0, 356, 210
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    //Picture Control
    CONTROL         103,IDC_PB_SPLASH,"Static",SS_BITMAP | SS_CENTERIMAGE | SS_REALSIZEIMAGE,0,0,356,210
    DEFPUSHBUTTON   "OK",IDOK,152,169,50,14
END

ここでの問題は、視覚スタイルを使用しているときに、画像がダイアログ ウィンドウの全領域を埋めないことです。ダイアログの両側に小さな空白が見られることがあります (SS_CENTERIMAGE を削除すると、右側の空白になります)。これは、ビジュアル スタイルなしでは起こりません。以下の写真は問題を示しています (そこで使用されている画像は単なる例です。実際の背景画像はより複雑であるため、ブラシでペイントするだけでは解決できません)

ビジュアル スタイルなし http://postimg.org/image/hji8sa6j1/

ビジュアル スタイル http://postimg.org/image/b733ig3gt/

リンクについて申し訳ありませんが、まだ画像を投稿するのに十分な評判がありません.

視覚スタイルを有効にしてウィンドウ全体をビットマップで埋める方法について何か提案はありますか? ボーダレスウィンドウを作成するためのmelak47によるこの素晴らしい答えhttps://stackoverflow.com/a/17713810/3022281を見つけましたが、ダイアログベースではありません。他に何も機能しない場合は、そのソリューションを使用する必要があると思います。

4

2 に答える 2

3

画像コントロールを使用しないでください。ダイアログに直接描画します。

BOOL CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){
    HDC hdc;
    RECT rt;

    switch (message){
        case WM_PAINT:
            GetWindowRect(hDlg, &rt);
            hdc = GetWindowDC(hDlg);
            StretchBlt(hdc, 0, 0, rt.right, rt.bottom, hdcMemBitmap, 0, 0, width, height, SRCCOPY);
            ReleaseDc(hDlg, hdc);
            break;
        default:   //for messages that we don't deal with
            return false;
    }

    return false;
}

widthheightですbitmaps width and height

ヴァルター

于 2014-02-21T18:45:53.203 に答える