2014-02-21 29 views
2

我是StackOverflow的新手,所以原諒我在帖子中犯的任何愚蠢錯誤。基於Win32對話框的無邊界窗口,位圖背景和視覺樣式

我有一個問題,使用Win32 API(無MFC)和基於對話框的應用程序創建一個帶有位圖背景的無邊框窗口。我使用Visual Studio 2010中

如果我使用Windows XP的視覺風格,通過將共同控制的問題只發生LIB用下面的代碼片段:

我有一個簡單的對話框和內它是一個帶有位圖圖像的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/

使用Visual樣式 http://postimg.org/image/b733ig3gt/

對不起,我還沒有足夠的聲望發佈圖片。

有關如何使位圖填充整個窗口並啓用視覺樣式的任何建議? 我發現這個很好的答案https://stackoverflow.com/a/17713810/3022281由melak47製作無邊框窗口,但它不是基於對話框的。如果沒有其他工作,我想我必須去解決這個問題。

+0

你想要一個模態或無模式對話框嗎? –

+0

嗨@valter,如果你的模態意味着用戶不得不點擊按鈕繼續,它將是非模態的。 我使用以下代碼創建它: HWND hDlg; hDlg = CreateDialogParam(hInst,MAKEINTRESOURCE(IDD_DIALOG_MAIN),0,DialogProc,0); ShowWindow(hDlg,nCmdShow); –

回答

2

很多大驚小怪左右後,我把它簡單地定義在.RC代碼比Visual Studio的對話框編輯器讓我少一點的圖像尺寸的工作。

通過使用編輯器,如果我將窗口邊緣一直拉到圖像寬度,或者如果將「實際尺寸圖像」屬性設置爲true,編輯器會提供尺寸(356,210),其中視覺樣式啓用時正離開空白區域。我只是手動調整寬度從356到353,白色空間消失了!因此,只有Visual Studio Editor計算啓用視覺樣式時尺寸錯誤。

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

瓦爾特

+0

非常感謝您的建議@valter!它確實工作正常,但我仍然對這個解決方案不滿意,所以我開始大驚小怪,並找到了一種通過只更改資源文件來解決問題的方法。我稍後會發布答案,因爲我沒有足夠的聲望在不到8個小時內回答我自己的問題。 –