draw bitmap on Explorer-Style Custom Templates
Env: WindowsXP, VC++6.00
I am trying to preview a bitmap file by using Explorer-Style Custom
Templates and GetOpenFileName(). The following is what I did:
(1)make a dlg with ID=IDD_DLG_PREVIEW, style
=WS_CHILD|WS_CLIPSIBLINGS|DS_3DLOOK|DS_CONTROL
(2)put a picture(ID=IDC_STATIC1) with bitmap type on the dlg
(3)define OPENFILENAME ofn as follows,
ofn.lpTemplateName = MAKEINTRESOURCE(IDD_DLG_PREVIEW);
ofn.Flags |=
OFN_FILEMUSTEXIST|OFN_ENABLESIZING|OFN_ENABLETEMPLATE|OFN_ENABLEHOOK;
ofn.lpfnHook =
(LPOFNHOOKPROC)MakeProcInstance((FARPROC)GetOpenFileNameHook,
AfxGetApp()->m_hInstance);
(4)draw bitmap inside GetOpenFileNameHook() as follows,
UINT_PTR CALLBACK GetOpenFileNameHook( HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
switch (msg)
{
case WM_NOTIFY:
LPOFNOTIFY lpOfNotify = (LPOFNOTIFY)lParam;
if( lpOfNotify->hdr.code == CDN_SELCHANGE )
if (IsItBitmapFile(FullPath))
{
HWND hStatic1 = GetDlgItem(hwnd, IDC_STATIC1);
HDC hDC = ::GetDC(hStatic1);
BitBlt(hDC, 0, 0, cx, cy, hdcImage, 0, 0, SRCCOPY);
}
}
With the method above, the bitmap can be showed. However, the bitmap will be
rubbed if we un-activate the app and re-avtivate it.
Then, I make a class CPreviewDlg(IDD = IDD_DLG_PREVIEW) by ClassZiward. And
fix GetOpenFileNameHook() as follows,
UINT_PTR CALLBACK GetOpenFileNameHook( HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
switch (msg)
{
case WM_NOTIFY:
LPOFNOTIFY lpOfNotify = (LPOFNOTIFY)lParam;
if( lpOfNotify->hdr.code == CDN_SELCHANGE )
if (IsItBitmapFile(FullPath))
{
InvalidateRect(hwnd, NULL, TRUE);
}
}
And put a break at void CPreviewDlg::OnPaint().
But I find CPreviewDlg::OnPaint() is not called.
I don't know how to solve the problem.
TIA
ou