draw bitmap on Explorer-Style Custom Templates

Tech-Archive recommends: Fix windows errors by optimizing your registry



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

.



Relevant Pages

  • Re: draw bitmap on Explorer-Style Custom Templates
    ... I am trying to preview a bitmap file by using Explorer-Style Custom ... UINT_PTR CALLBACK GetOpenFileNameHook(HWND hwnd, UINT msg, WPARAM wParam, ... LPOFNOTIFY lpOfNotify = lParam; ...
    (microsoft.public.vc.language)
  • draw bitmap on Explorer-Style Custom Templates
    ... I am trying to preview a bitmap file by using Explorer-Style Custom ... UINT_PTR CALLBACK GetOpenFileNameHook(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) ... LPOFNOTIFY lpOfNotify = lParam; ...
    (microsoft.public.vc.mfc)
  • draw bitmap on Explorer-Style Custom Templates
    ... I am trying to preview a bitmap file by using Explorer-Style Custom ... UINT_PTR CALLBACK GetOpenFileNameHook(HWND hwnd, UINT msg, WPARAM wParam, ... LPOFNOTIFY lpOfNotify = lParam; ...
    (microsoft.public.vc.language)
  • Re: draw bitmap on Explorer-Style Custom Templates
    ... I am trying to preview a bitmap file by using Explorer-Style Custom ... UINT_PTR CALLBACK GetOpenFileNameHook(HWND hwnd, UINT msg, WPARAM wParam, ... LPOFNOTIFY lpOfNotify = lParam; ...
    (microsoft.public.vc.mfc)
  • Re: GetDesktopWindow from non-interactive service...
    ... >>> all the AddTheAceWindowStation -- which are from MSDN. ... BITMAP bmp; ... >>> HWND hwnd = desktopWindow; ... >>> HDC hScreenDC = GetDC; ...
    (microsoft.public.platformsdk.security)