使用 CSplitterWindowImpl 处理移动并使子窗格无效
Handle moving with CSplitterWindowImpl and invalidate child panes
当拆分器在 WTL 中移动时,我需要使两个窗格失效。目前,其中一个在拆分器移动时无效,另一个在拆分器移动停止时无效。如何处理分路器移动?
通常不需要显式失效,因为拆分器会移动子窗口,并且它们会收到导致 UI 更新的常规消息WM_SIZE
。问题本身表明子窗口的某些内容不正确。
您当然可以覆盖拆分器的UpdateWindow
来处理拆分器末端重新定位,但通常不需要这样做。拆分器本身失效,SetWindowPos
应用于其帮助程序UpdateSplitterLayout
方法中的窗格,您可以使用调试器单步执行该方法以确保执行此代码。
LRESULT OnMouseMove(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// [...]
if(m_bFullDrag)
{
if(pT->SetSplitterPos(xyNewSplitPos, true))
pT->UpdateWindow();
bool SetSplitterPos(int xyPos = -1, bool bUpdate = true)
{
// [...]
UpdateSplitterLayout();
void UpdateSplitterLayout()
{
// [...]
for(int nPane = 0; nPane < m_nPanesCount; nPane++)
{
// [...]
::SetWindowPos(m_hWndPane[nPane], NULL, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER);
您可能希望确保m_bFullDrag
设置为TRUE
,以便在移动过程中强制重绘。
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 无法访问嵌套类.类的使用无效
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- FFMPEG配置文件级别id大小无效
- 错误:从"int"到枚举c++的转换无效
- 如何修复此错误:className::className的无效使用
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- C++-模板嵌套类的引用初始化无效
- 错误:无效的预处理指令 #i 的意思是 #if?
- 多维数组 C++ 中数组下标的类型"int[int]"无效
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- 从 'int' 到 'int*' CPP 的转换无效
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 由于无效的 ValidateRgn() 子窗口不会收到WM_PAINT消息
- C++ PTHREADS - 无效转换无效*(*)()到无效*(*)(无效*)
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 数组下标的类型"float*[float]"无效
- 修改 std::vector 会使迭代器无效吗?