MFC的onpaint函数调用时机
时间: 2024-06-02 13:08:16 浏览: 12
MFC的OnPaint函数是在窗口无效(invalidate)时被调用的。当窗口需要重绘时,Windows会发送一个WM_PAINT消息给窗口,MFC会将该消息映射到OnPaint函数中。因此,当窗口需要重绘时,OnPaint函数就会被调用。在OnPaint函数中,可以使用设备上下文(DC)进行绘制操作。
相关问题
窗口的OnPaint函数在哪里
OnPaint函数是在Windows程序中处理绘图消息的一个函数,它通常是在窗口的消息处理函数中被调用。在MFC程序中,OnPaint函数是在窗口类的消息映射表中被声明和实现的。在Win32 API程序中,OnPaint函数是在窗口过程(WndProc)中处理WM_PAINT消息时被调用的。无论是MFC程序还是Win32 API程序,OnPaint函数都是用来绘制窗口的客户区域的。
Mfc 的对话框里控件如何在外部函数调用
如果想在外部函数中调用对话框中的控件,可以通过对话框类的指针来实现。
首先在对话框类的头文件中声明一个指向该类的指针:
```
class CMyDialog : public CDialogEx
{
public:
CMyDialog(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CMyDialog();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MYDIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
// 声明指向该类的指针
static CMyDialog* m_pDlg;
};
```
然后在对话框类的实现文件中对指针进行初始化:
```
CMyDialog* CMyDialog::m_pDlg = nullptr;
CMyDialog::CMyDialog(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MYDIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
// 初始化指针
m_pDlg = this;
}
```
接着,在外部函数中调用对话框类的指针,通过指针访问对话框中的控件:
```
void CMyClass::MyFunction()
{
// 获取对话框指针
CMyDialog* pDlg = CMyDialog::m_pDlg;
// 访问对话框控件
CString strText;
pDlg->GetDlgItemText(IDC_EDIT1, strText);
pDlg->SetDlgItemText(IDC_EDIT2, strText);
}
```
需要注意的是,如果对话框类的指针未初始化,调用对话框控件将会导致程序崩溃。因此,在调用对话框控件之前,一定要确保对话框类的指针已经初始化。