draw bitmap on Explorer-Style Custom Templates
- From: "ou" <ou07@xxxxxxxxxxxxxxx>
- Date: Wed, 5 Mar 2008 20:31:59 +0900
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
.
- Prev by Date: Re: EnumDisplayDevice does not work from within a service under Vi
- Next by Date: GDI+ Image to Clipboard
- Previous by thread: Re: How Window Handles invalidate
- Next by thread: GDI+ Image to Clipboard
- Index(es):
Relevant Pages
|