Winapi 在MDI应用程序中使用ITaskbarlist3(VC+;+;-MFC/Win32)
我一直在尝试将Windows7任务栏API合并到常规MFCMDI(多文档界面)应用程序中。我使用的是Visual Studio 2008,我已将SDK路径重定向到Windows 7 SDK 其想法是为应用程序内部创建的每个子框架窗口提供自定义实时预览位图。虽然我已经取得了进步,但在最后的几点上,我仍在挣扎,似乎有些不对劲。我只是想知道我是否遗漏了什么 嗯Winapi 在MDI应用程序中使用ITaskbarlist3(VC+;+;-MFC/Win32),winapi,mfc,taskbar,dwm,Winapi,Mfc,Taskbar,Dwm,我一直在尝试将Windows7任务栏API合并到常规MFCMDI(多文档界面)应用程序中。我使用的是Visual Studio 2008,我已将SDK路径重定向到Windows 7 SDK 其想法是为应用程序内部创建的每个子框架窗口提供自定义实时预览位图。虽然我已经取得了进步,但在最后的几点上,我仍在挣扎,似乎有些不对劲。我只是想知道我是否遗漏了什么 嗯 因此,我们需要一个代理窗口,因为实时预览API只能在顶级窗口上工作(这令人失望)。此窗口处理WM_DWMSendiconthumbnail和W
case WM_DWMSENDICONICTHUMBNAIL:
// get the bitmap of the client window
// set it as thumbnail
width = HIWORD(lParam);
height = LOWORD(lParam);
hBitmap = CreateBitmapFromHandleAndResize(hwnd, width, height);
if (hBitmap)
{
SetThumbnail(hBitmap, hwnd);
DeleteObject(hBitmap);
}
break;
case WM_DWMSENDICONICLIVEPREVIEWBITMAP:
hBitmap = CreateBitmapFromHandle(hwnd);
if (hBitmap)
{
SetThumbnailForPreview(hBitmap, hwnd);
DeleteObject(hBitmap);
}
break;
void SetThumbnailForPreview(HBITMAP hBitmap, HWND hWnd)
{
StateInfo *pState = (StateInfo *)GetWindowLongPtr(hWnd, GWLP_USERDATA);
CWnd* pMainFrame = pState->m_pParentWnd->GetParent();
pState->pTaskBar->SetTabActive(hWnd, pMainFrame->GetSafeHwnd(), 0);
RECT rectClient, rectMainframe;
pState->m_pParentWnd->GetClientRect(&rectClient);
pState->m_pParentWnd->ClientToScreen(&rectClient);
pMainFrame->GetWindowRect(&rectMainframe);
POINT offset;
offset.x = (rectClient.left - rectMainframe.left) - 8;
offset.y = (rectClient.top - rectMainframe.top) + 14;
HRESULT hr = DwmSetIconicLivePreviewBitmap(hWnd, hBitmap, &offset, 0);
}
简而言之,我的问题是:
缩略图是子窗口的单独表示形式 在实时预览区域: 如果将鼠标悬停在单个缩略图上,则实时预览始终显示MDI主视图
框架与子窗口一起。这里的区别在于用户可以看到
获得焦点和高亮显示的特定子窗口(悬停所在的子窗口)
Ranjit有趣的是,你说实时预览只适用于顶级窗口,它必须是可能的,因为IE9+做到了这一点。。。很幸运有趣的是,你说的实时预览只适用于顶级窗口,它必须是可能的,因为IE9+做到了这一点。。。祝你好运