Visual c++ 如何在子窗口中重新绘制UI?
我正在创建一个子窗口,通过滚动条移动UI。 UI引用滚动条的位置并运行MoveWindow() 我希望在运行UpdateWindow()时重新绘制UI,但会留下后像。 重画的正确方法应该是什么 父窗口Visual c++ 如何在子窗口中重新绘制UI?,visual-c++,mfc,Visual C++,Mfc,我正在创建一个子窗口,通过滚动条移动UI。 UI引用滚动条的位置并运行MoveWindow() 我希望在运行UpdateWindow()时重新绘制UI,但会留下后像。 重画的正确方法应该是什么 父窗口 BOOL CScrollWindowDlg::OnInitDialog() { CDialogEx::OnInitDialog(); InnerWindow* inwin = new InnerWindow(); inwin->Create(NULL, NULL, W
BOOL CScrollWindowDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
InnerWindow* inwin = new InnerWindow();
inwin->Create(NULL, NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL, CRect(50, 50, 600, 450), this, NULL);
inwin->Init();
return TRUE;
}
子窗口
#pragma once
#include <afxwin.h>
#include <memory>
class InnerWindow : public CWnd
{
public:
InnerWindow();
~InnerWindow();
void Init();
protected:
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
DECLARE_MESSAGE_MAP()
private:
std::unique_ptr<CStatic> m_label;
SCROLLINFO m_scrollinfo;
};
#pragma一次
#包括您没有在此处为InnerWindow
指定窗口类:
inwin->Create(NULL, NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL, CRect(50, 50, 600, 450), this, NULL);
没有人画那个窗口,也没有人擦去它的背景
如果您对该窗口没有任何特殊需求,我将只使用静态
:
inwin->Create(L"STATIC", NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL, CRect(50, 50, 600, 450), this, NULL);
为什么要在pScrollBar
中检查null ptr?添加此选项是为了区分其他CScrollBar控件(非null)和窗口滚动条(null)。此示例不是必需的。@Evan.Titer-我的建议仍然有效-对窗口类使用STATIC
当我将其设置为STATIC时,滚动条停止工作。我想用滚动条移动UI。@Evan.Titer-右,“静态”会阻止一切。如果您使用L“BUTTON”类,您可以看到它是如何工作的,但您确实应该定义自己的。成功!我将WNDCLASS设置为创建方法。
inwin->Create(L"STATIC", NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL, CRect(50, 50, 600, 450), this, NULL);