drw*_*bns 1 c++ windows winapi windows-shell
我目前正在使用SHBrowseForFolder()打开浏览文件夹窗口但是当按下取消/确定时如何将焦点返回到我的主窗口.我读到我应该在对话框关闭之前重新启用我的主窗口,但究竟是哪里?有什么想法吗?
void buttonPush(HWND hWnd) {
EnableWindow(hWnd, FALSE);
BROWSEINFO bi = { 0 };
TCHAR szDir[MAX_PATH] = { 0 };
LPITEMIDLIST pid = NULL;
LPMALLOC pMalloc = NULL;
if (SUCCEEDED(SHGetMalloc(&pMalloc)))
{
ZeroMemory(&bi,sizeof(bi));
bi.hwndOwner = NULL;
bi.pszDisplayName = NULL;
bi.pidlRoot = NULL;
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT | BIF_USENEWUI;
bi.lpfn = BrowseCallbackProc;
pidl = SHBrowseForFolder(&bi);
if (pidl)
{
// Folder selected in dialog
pMalloc->Free(pidl);
}
pMalloc->Release();
}
EnableWindow(hWnd, TRUE);
}
Run Code Online (Sandbox Code Playgroud)
EnableWindow(hWnd, false);
Run Code Online (Sandbox Code Playgroud)
这是错误的,因为你的帮助太多了.当对话框关闭时,应用程序中没有剩下的窗口仍然可以获得焦点.您的hWnd仍处于禁用状态,直到稍后才会启用.因此Windows窗口管理器被迫找到另一个窗口来关注焦点.这将是另一个应用程序的窗口.你的窗户不可避免地会在它后面消失.
删除EnableWindow()调用.这已经足够了,但你可以告诉关于你的窗口的对话框,所以它不必猜测它,如果你的窗口由于某种原因不是活动窗口是有用的:
bi.hwndOwner = hWnd;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |