首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

SelectDirectory解决方法

2012-03-06 
SelectDirectory有人可以帮我看看为什么会出现这样的问题!我做了一个带界面的DLL,界面就一个按钮,事件就个

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;
//加入你的代码
}

热点排行