[WTL] Dialog-Redraw Problem
-
hallo,
ich habe einen simplen dialog mit einem CStatic control und zwei buttons erstellt. in das CStatic control wird zur laufzeit, innerhalb der on_paint-methode, eine jpg-datei geladen. das funktioniert auch wunderbar, nur sobald der dialog minimiert und anschließend wieder in den fokus kommt, sind die beiden buttons verschwunden. erst wenn die das dialogfenster manuel ein stück verschiebe, werden die buttons wieder korrekt neugezeichnet. hier ist der code:#include <atlmisc.h> #include <atlcrack.h> class CMainDlg : public CDialogImpl<CMainDlg> { public: enum { IDD = IDD_MAINDLG }; BEGIN_MSG_MAP(CMainDlg) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) MESSAGE_HANDLER(WM_PAINT, on_paint) COMMAND_ID_HANDLER(ID_OK, OnCancel) COMMAND_ID_HANDLER(IDCANCEL, OnCancel) END_MSG_MAP() LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { // center the dialog on the screen CenterWindow(); // set icons HICON hIcon = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON)); SetIcon(hIcon, TRUE); HICON hIconSmall = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON)); SetIcon(hIconSmall, FALSE); return TRUE; } void draw_img() { // display image HWND hwnd = GetDlgItem(ID_PIC); CStatic pic_ctrl(hwnd); CImage pic_cam; CRect rect; if (pic_cam.Load(L"c:\\test.bmp") == S_OK) { pic_ctrl.GetClientRect(&rect); pic_cam.StretchBlt(pic_ctrl.GetDC(), 0, 0, rect.Width(), rect.Height(), SRCCOPY); } else MessageBox(L"Bild konnte nicht geladen werden.", L"Fehler"); } LRESULT on_paint(UINT, WPARAM, LPARAM, BOOL& bHandled) { draw_img(); //bHandled = false; // !!! return 0; } LRESULT OnCancel(WORD, WORD wID, HWND, BOOL&) { EndDialog(wID); return 0; } };
wenn ich Zeile 45 nicht auskommentiere, werden zwar die buttons korrekt neugezeichnet, allerdings sieht man dann das bild nur noch ganz kurz aufblinken und dann verschwindet es.
wo liegt denn da der hund begraben?lg