SelectDirectory
有人可以帮我看看为什么会出现这样的问题!
我做了一个带界面的DLL,界面就一个按钮,
事件就个
AnsiString SaveFile;
if(!SelectDirectory( "请选择数据存储目录 ", "我的电脑 ",SaveFile))
{
return;
}
Dll已经做好,
用其他程序调用Dll也能显示界面,单击按钮也能显示选择路经的对话框,
但是对话框为什么在左上阿?不是应该在右下吗?
[解决办法]
以前收集的季老大的代码:
//用下面的代码,SelectDirectory弹出的对话框,始终位于屏幕的中间。
static HHOOK hHook = NULL;
static long CALLBACK CBTFun(int nCode, WPARAM wParam, LPARAM lParam)
{
long ret;
TRect r0;
TForm* ActForm;
TMonitor* Monitor;
HWND hWnd = (HWND)wParam;
if (nCode==HCBT_ACTIVATE) {
GetWindowRect(hWnd, &r0);
ret = CallNextHookEx(hHook, nCode,
wParam, lParam);
if (UnhookWindowsHookEx(hHook))
hHook = NULL;
ActForm = Screen-> ActiveForm;
Monitor = ActForm ? ActForm->
Monitor:Screen-> Monitors[0];
//这儿将对话框始移到屏幕的中间
MoveWindow(hWnd, Monitor-> Left+(
Monitor-> Width-r0.Width())/2,
Monitor-> Top+(Monitor-> Height
-r0.Height())/2,r0.Width(),r0
.Height(),0);
return ret;
}
return CallNextHookEx(hHook, nCode,
wParam, lParam);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Path;
hHook = SetWindowsHookEx(WH_CBT, (FARPROC)
CBTFun, NULL, GetCurrentThreadId());
if (!SelectDirectory( "请选择目录 ", " ",Path))
return;
//加入你的代码
}