SHBrowseForFolder回调中如何让选中项滚动到树视图可见区域?
关于SHBrowseForFolder中自动滚动选中目录到可见区域的问题
我又来咨询SHBrowseForFolder相关问题了,感谢Charlieface之前的帮助,目前已经取得不少进展,但还差最后一步需要完善。
在BFFCALLBACK BrowseCallbackProc中选中目标项后,能否发送TVM_ENSUREVISIBLE消息,将选中条目滚动到树视图的可见区域?目前无法实现的原因是缺少选中条目的指针——也就是BFFM_SETSELECTIONW的返回结果。
我之前通过外部程序获取对话框窗口和树视图后,成功实现了将选中项移到可见区域,代码如下:
SendMessage(hwndTV, TVM_SELECTITEM, new IntPtr(TVGN_CARET), SelectItem); // 选中目录 SendMessage(hwndTV, TVM_ENSUREVISIBLE, IntPtr.Zero, SelectItem); // 将选中目录滚动到可见区域
请问只能通过这种外部程序的方式实现吗?
我尝试了以下代码,但无法正常工作:
if (msg == API32.BFFM_INITIALIZED) // 对话框窗口初始化完成后... { _ = API32.SendMessage(hwnd, API32.BFFM_SETSELECTIONW, 1, _selectedPath); // 选中对应路径的TreeView项 IntPtr SelectItem = IntPtr.Zero; _ = API32.SendMessage(hwnd, API32.TVM_SELECTITEM, new IntPtr(API32.TVGN_CARET), SelectItem); // 选中目标目录 _ = API32.SendMessage(hwnd, API32.TVM_ENSUREVISIBLE, IntPtr.Zero, SelectItem); // 将目标目录滚动到可见区域 }
内容的提问来源于stack exchange,提问作者perlfred
相关产品推荐
相关产品推荐

