int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CClientDC dc(this);
// TEXTMETRIC word;
// dc.GetTextMetrics(&word);//该处应该为指针
// CreateSolidCaret(word.tmMaxCharWidth/10,word.tmHeight);
CClientDC adc(this);
adc.TextOut(0,300,"这是一个失败的例子!");
bitmap.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bitmap); //需要使用指针
ShowCaret();
// TODO: Add your specialized creation code here
return 0;
}
窗口重绘会发生在什么时候呢,为什么这个语句adc.TextOut(0,300,"这是一个失败的例子!");一次都不会显示。
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CClientDC dc(this);
// TEXTMETRIC word;
// dc.GetTextMetrics(&word);//该处应该为指针
// CreateSolidCaret(word.tmMaxCharWidth/10,word.tmHeight);
CClientDC adc(this);
adc.TextOut(0,300,"这是一个失败的例子!");
bitmap.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bitmap); //需要使用指针
ShowCaret();
// TODO: Add your specialized creation code here
return 0;
}
窗口重绘会发生在什么时候呢,为什么这个语句adc.TextOut(0,300,"这是一个失败的例子!");一次都不会显示。
放到加载BMP图像之后,以免被覆盖掉
只是不清楚这个地方为什么不能显示。
谢谢各位了。
比如你调用:Invalidate()函数的时候;
ondraw只重绘view部分,就是一开始生成的白的部分,俗称客户区,工作区。工具栏菜单栏属于框架类。ondraw绘制的部分不但显示在屏幕上而且可以输出到打印机等其他输出设备上,onpaint是处理窗口在标准输出(显示器)重绘的。
一:一般的ONPAINT是系统默认调用的,如果不重绘,给要重绘的窗口加上一句,mywin.ShowWindow(SW_HIDE);
二:如果要在其他事件函数中强制重绘加 函数 InvalidateRect(&Rect)Invalidate()UpdateWindow()
三:动态绘制,比如我点一个BUTTON开始绘图,但我窗口被覆盖刚才绘制的图像就消失了怎么办?
四:MFC中主窗体先OnInitDialog(),然后调用其他窗口的Create方法调用Oncreate方法,Oncreate方法完成后,进行OnPaint方法。
五:MFC中对窗口或者区域的操作都是通过CRect来是想的:如:
CRect rectqx;
GetDlgItem(IDC_STATIC_SPEEDVIEW)->GetWindowRect(&rectqx);
ScreenToClient(rectqx);