void CEmailSettingDlg::OnBnClickedOk()
{
UpdateData(1);
CEmailManagementDlg *pdlg = (CEmailManagementDlg*)AfxGetApp()->GetMainWnd();
if (m_str_BackGround == "蒲公英")
m_str_BackGround = "1";
if (m_str_BackGround == "书")
m_str_BackGround = "2";
if (m_str_BackGround == "天空")
m_str_BackGround = "3";
if (m_str_BackGround == "秦时明月")
m_str_BackGround = "4";
//刷新显示新的背景
CString temp = pdlg->m_backGround; //暂存原背景图数据
pdlg->m_backGround = m_str_BackGround;
** ::SendMessage(pdlg->m_hWnd, WM_PAINT, 0, 0);**
//UpdateWindow();
pdlg->m_backGround = temp;
//如果设置没变,则不需要打开数据库(出于效率考虑)
if (!(m_str_AutoReply == pdlg->m_auto_reply && m_str_BackGround == pdlg->m_backGround))
{
CString temp;
temp.Format("update user_psw_tab set auto_reply = '%s', back_ground = %d where user_name = '%s'", m_str_AutoReply, atoi(m_str_BackGround), pdlg->m_str_UserName);
TRACE(temp);
pdlg->m_db.ExecuteSQL(temp);
AfxMessageBox("更新成功!");
}
CDialogEx::OnOK();
}
void CEmailManagementDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this); // 用于绘制的设备上下文
CRect rc;
GetClientRect(&rc);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackground;
switch (atoi(m_backGround))
{
case 1:
bmpBackground.LoadBitmap(IDB_BITMAP_FLOWER);
break;
case 2:
bmpBackground.LoadBitmap(IDB_BITMAP_BOOK);
break;
case 3:
bmpBackground.LoadBitmap(IDB_BITMAP_SKY);
break;
case 4:
bmpBackground.LoadBitmap(IDB_BITMAP_QIN);
break;
}
BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap* pbmpPri = dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0, 0, rc.Width(), rc.Height(), &dcMem, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);
//CDialogEx::OnPaint(); //这句需要去掉
}
}
我想实现实时切换 CEmailManagementDlg的背景
CEmailSettingDlg设置背景数据,点击确定后去刷新CEmailManagementDlg的背景
但是调试发现尽管SendMessage消息以后进入了CEmailManagementDlg的OnPaint函数,但是语句执行完以后并没有改变背景,请问我哪里错了吗。。