在Cstatic下使用dc输出文字,程序跑起来的时候有字,一onsize就什么都没有了
在Cstatic上使用dc输出文字,程序跑起来的时候有字,一onsize就什么都没有了
如题,我在单文档程序中添加了一个列表框CMyList m_list,在派生类CMylist 里面有添加了一个成员变量CStatic m_static, 并且创建了它,然后我使用OnPaint调用我加的函数在m_static上输出文字,程序运行起来的时候字显示出来了,但是一变化窗口的大小字就不见了,求助,该如何解决啊。帮忙啊?贴代码,如下:
创建函数
int CMyList::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CListCtrl::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
m_static.Create(NULL, WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(0,0,0,0), this,IDC_TS);
return 0;
}
void CMyList::OnPaint()
{
CPaintDC dc(this); // device context for painting
DrawMyText();
}
void CMyList::DrawMyText()
{
ModifyStyle(0, BS_OWNERDRAW); // 修改CStatic样式,改成自绘制,这一步很重要
CRect rc;
m_static.GetClientRect(&rc);
CDC * pDc = GetDlgItem(IDC_TS)->GetDC();
pDc->DrawText("hello",-1,rc,DT_CENTER);
}
void CMyList::OnSize(UINT nType, int cx, int cy)
{
CListCtrl::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect rc(50,200,250,250);
m_static.MoveWindow(rc);
}
大家帮我分析下啊
------解决方案--------------------
是不是文本框的movewindow坐标有问题呢?这个可能性很大
------解决方案--------------------
在onmove消息中也要处理吧
------解决方案--------------------
在合适的地方发送WM_PAINT消息,或者Invalidate你的那个CStatic窗口对象
------解决方案--------------------
------解决方案--------------------
void CMyList::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rc;
m_static.GetClientRect(&rc);
CDC * pDc = GetDlgItem(IDC_TS)->GetDC();
pDc->DrawText("hello",-1,rc,DT_CENTER);
}
------解决方案--------------------
2种方法:
1.重载CMyList的WM_PAINT消息
2.或者再主页面OnSize后,CStatic自己Invalidate(该方法不能是在CMyList的ON_PAINT上面画上去的)
------解决方案--------------------
m_static.setwindowtext
不就完了, 为啥要自己画
------解决方案--------------------
在onsize里面也要DrawMyText()
------解决方案--------------------
ModifyStyle(0, BS_OWNERDRAW)m_static调用
------解决方案--------------------
把你绘制的代码放到OnPaint函数中去做~
如题,我在单文档程序中添加了一个列表框CMyList m_list,在派生类CMylist 里面有添加了一个成员变量CStatic m_static, 并且创建了它,然后我使用OnPaint调用我加的函数在m_static上输出文字,程序运行起来的时候字显示出来了,但是一变化窗口的大小字就不见了,求助,该如何解决啊。帮忙啊?贴代码,如下:
创建函数
int CMyList::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CListCtrl::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
m_static.Create(NULL, WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(0,0,0,0), this,IDC_TS);
return 0;
}
void CMyList::OnPaint()
{
CPaintDC dc(this); // device context for painting
DrawMyText();
}
void CMyList::DrawMyText()
{
ModifyStyle(0, BS_OWNERDRAW); // 修改CStatic样式,改成自绘制,这一步很重要
CRect rc;
m_static.GetClientRect(&rc);
CDC * pDc = GetDlgItem(IDC_TS)->GetDC();
pDc->DrawText("hello",-1,rc,DT_CENTER);
}
void CMyList::OnSize(UINT nType, int cx, int cy)
{
CListCtrl::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect rc(50,200,250,250);
m_static.MoveWindow(rc);
}
大家帮我分析下啊
------解决方案--------------------
是不是文本框的movewindow坐标有问题呢?这个可能性很大
------解决方案--------------------
在onmove消息中也要处理吧
------解决方案--------------------
在合适的地方发送WM_PAINT消息,或者Invalidate你的那个CStatic窗口对象
------解决方案--------------------
------解决方案--------------------
void CMyList::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rc;
m_static.GetClientRect(&rc);
CDC * pDc = GetDlgItem(IDC_TS)->GetDC();
pDc->DrawText("hello",-1,rc,DT_CENTER);
}
------解决方案--------------------
2种方法:
1.重载CMyList的WM_PAINT消息
2.或者再主页面OnSize后,CStatic自己Invalidate(该方法不能是在CMyList的ON_PAINT上面画上去的)
------解决方案--------------------
m_static.setwindowtext
不就完了, 为啥要自己画
------解决方案--------------------
在onsize里面也要DrawMyText()
------解决方案--------------------
ModifyStyle(0, BS_OWNERDRAW)m_static调用
------解决方案--------------------
把你绘制的代码放到OnPaint函数中去做~