是这样的,我想在datagrid中突显当前行,想来想去,就是在当前行的边框上画上一个有色长方形最简单一开始,我不知道怎么能在上面画线,在onpaint里面画,但却是被控件覆盖了
我想会不会是因为它重绘完对话框在重绘子窗口(控件),所以onpaint中画的被遮盖了
于是我试了下,在onpaint中发送消息,打算让其重绘结束捕获这个消息
void CTrygridDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
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;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
PostMessage(UM_DRAWLINE,0,0);
}
else
{
// m_grid.Invalidate();*/
PostMessage(UM_DRAWLINE,0,0);
CDialog::OnPaint();
}
}void CTrygridDlg::OnDrawLine(WPARAM wParam, LPARAM lParam)
{
CDC* dc=GetDC();
dc->MoveTo(0,0);
dc->LineTo(500,500);
DeleteObject(&dc);
}
发现的确可行!!
但是如果真的是在datagrid中作图,也就是把CDC* dc=GetDC();改成CDC* dc=m_grid.GetDC();
也的确如所愿出现那条直线,但是一旦切换窗口在切换回来,直线消失,甚至能够看到它消失(一闪),如果是获得对话框的设备上下文,却没有这回事
不知道这是为什么?或者有没有更好的解决方法,就是作图而不被覆盖
谢谢
我想会不会是因为它重绘完对话框在重绘子窗口(控件),所以onpaint中画的被遮盖了
于是我试了下,在onpaint中发送消息,打算让其重绘结束捕获这个消息
void CTrygridDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
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;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
PostMessage(UM_DRAWLINE,0,0);
}
else
{
// m_grid.Invalidate();*/
PostMessage(UM_DRAWLINE,0,0);
CDialog::OnPaint();
}
}void CTrygridDlg::OnDrawLine(WPARAM wParam, LPARAM lParam)
{
CDC* dc=GetDC();
dc->MoveTo(0,0);
dc->LineTo(500,500);
DeleteObject(&dc);
}
发现的确可行!!
但是如果真的是在datagrid中作图,也就是把CDC* dc=GetDC();改成CDC* dc=m_grid.GetDC();
也的确如所愿出现那条直线,但是一旦切换窗口在切换回来,直线消失,甚至能够看到它消失(一闪),如果是获得对话框的设备上下文,却没有这回事
不知道这是为什么?或者有没有更好的解决方法,就是作图而不被覆盖
谢谢
发现非得捕捉datagrid的刷新不可
否则一旦我在datagrid中操作,好像就会重绘
此时我在dialog中的捕捉不到
也就是前面的作图被覆盖了
在这个函数里做,应该就可以了。