paint中:
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);
}
else
{
//加载背景图
CPaintDC dc(this); //
HBITMAP hbitmap = //
::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_MAINMAP));
HDC hMemDC = ::CreateCompatibleDC(NULL); //
SelectObject(hMemDC, hbitmap);
::StretchBlt(dc.m_hDC,0,0,1000,1000,hMemDC,0,0,1000,1000,SRCCOPY);
::DeleteDC(hMemDC);
::DeleteObject(hbitmap);
::DeleteDC(dc);// 从注册表取CString值然后textout
CString result;
LPCTSTR data_Set="Software\\Microsoft\\MS Setup (ACME)\\User Info\\";
result = GetRegValue(HKEY_CURRENT_USER, data_Set, "logoname", (LPCTSTR)_T(""), 255);
CFont font;
CDC *pDC = GetDC();
font.CreateFont(38,0,0,0,0,0,0,0,0,1,1,1,1,_T("Arial"));
pDC->SelectObject( &font );
pDC->SetBkMode(TRANSPARENT);//
pDC->SetTextColor(RGB(0, 0,255));//
UpdateData();
pDC->TextOut(350,20,result);//
ReleaseDC(pDC);
//输出副标题
CFont font1;
CDC *pDC1 = GetDC();
font.CreateFont(24,0,0,0,0,0,0,0,0,1,1,1,1,"黑体");
//font.CreatePointFont(50,"MS Sans Serif");
pDC1->SelectObject( &font );
pDC1->SetBkMode(TRANSPARENT);//
pDC1->SetTextColor(RGB(0, 0,255));//
UpdateData();
pDC1->TextOut(600,58,"JTJ-DTS32............");/////////
ReleaseDC(pDC1);//输出磁盘使用情况
font.CreateFont(15,0,0,0,0,0,0,0,0,1,1,1,1,_T("Arial"));
CDC *pDC2 = GetDC();
pDC2->SelectObject( &font );
pDC2->SetBkMode(TRANSPARENT);//
pDC2->SetTextColor(RGB(255,255,255));//
pDC2->TextOut(90,580,showuse);
pDC2->TextOut(90,600,showfree);
pDC2->TextOut(90,620,showtotal);
ReleaseDC(pDC2);程序启动后一切正常,但是连续按“显示桌面”大约60次时,第一,第二的输出变成同样大小切字体相同,第一个输出的字体变小,第二个输出的字体变大。
第三个字体变大。变成和前二者大小不同的大小。
且有时候背景图不再能正确加载。
郁闷,大家分析下。
对了,字体变的时候连给各个按纽做的tooltip的字体都变大了好多!
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);
}
else
{
//加载背景图
CPaintDC dc(this); //
HBITMAP hbitmap = //
::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_MAINMAP));
HDC hMemDC = ::CreateCompatibleDC(NULL); //
SelectObject(hMemDC, hbitmap);
::StretchBlt(dc.m_hDC,0,0,1000,1000,hMemDC,0,0,1000,1000,SRCCOPY);
::DeleteDC(hMemDC);
::DeleteObject(hbitmap);
::DeleteDC(dc);// 从注册表取CString值然后textout
CString result;
LPCTSTR data_Set="Software\\Microsoft\\MS Setup (ACME)\\User Info\\";
result = GetRegValue(HKEY_CURRENT_USER, data_Set, "logoname", (LPCTSTR)_T(""), 255);
CFont font;
CDC *pDC = GetDC();
font.CreateFont(38,0,0,0,0,0,0,0,0,1,1,1,1,_T("Arial"));
pDC->SelectObject( &font );
pDC->SetBkMode(TRANSPARENT);//
pDC->SetTextColor(RGB(0, 0,255));//
UpdateData();
pDC->TextOut(350,20,result);//
ReleaseDC(pDC);
//输出副标题
CFont font1;
CDC *pDC1 = GetDC();
font.CreateFont(24,0,0,0,0,0,0,0,0,1,1,1,1,"黑体");
//font.CreatePointFont(50,"MS Sans Serif");
pDC1->SelectObject( &font );
pDC1->SetBkMode(TRANSPARENT);//
pDC1->SetTextColor(RGB(0, 0,255));//
UpdateData();
pDC1->TextOut(600,58,"JTJ-DTS32............");/////////
ReleaseDC(pDC1);//输出磁盘使用情况
font.CreateFont(15,0,0,0,0,0,0,0,0,1,1,1,1,_T("Arial"));
CDC *pDC2 = GetDC();
pDC2->SelectObject( &font );
pDC2->SetBkMode(TRANSPARENT);//
pDC2->SetTextColor(RGB(255,255,255));//
pDC2->TextOut(90,580,showuse);
pDC2->TextOut(90,600,showfree);
pDC2->TextOut(90,620,showtotal);
ReleaseDC(pDC2);程序启动后一切正常,但是连续按“显示桌面”大约60次时,第一,第二的输出变成同样大小切字体相同,第一个输出的字体变小,第二个输出的字体变大。
第三个字体变大。变成和前二者大小不同的大小。
且有时候背景图不再能正确加载。
郁闷,大家分析下。
对了,字体变的时候连给各个按纽做的tooltip的字体都变大了好多!
解决方案 »
- 求问如何获取文字的位图图像
- 窗口分割后,视图的大小(宽高)为什么不是设定值?
- 一个VC程序的小错误?
- 编译问题急求助!
- 如何从屏幕上取一部分图像到一个RGB的数组中?
- ☆★☆好东东,学VC的E书,快快去下载呀!!
- static const AFX_DATA CRuntimeClass class##classname
- CSliderCtrl滑块移动问题
- 请问该如何自定义消息映射?
- 如何在IE的标题栏中加上自己的图标(像金山词霸,Netant)
- 如何在点击CPropertySheet某个Page的“确认”按钮时,不关闭这个CPropertySheet向导?立即结帐。谢谢!
- ADO编程时的一点小疑问:::
CString strText = "JTJ-DTS32............";
pDC1->TextOut(600,58,strText);
CDC *pDC1 = GetDC();
font.CreateFont(24,0,0,0,0,0,0,0,0,1,1,1,1,"黑体");
//font.CreatePointFont(50,"MS Sans Serif");
pDC1->SelectObject( &font );
pDC1->SetBkMode(TRANSPARENT);//
pDC1->SetTextColor(RGB(0, 0,255));//
UpdateData();
pDC1->TextOut(600,58,"JTJ-DTS32............");/////////
ReleaseDC(pDC1);
楼主这里你到底想用Font还是Font1啊?是不是写错了?另外,如果第二次使用font的话,使用前应该释放第一次的font对象,然后再createfont!
CFont font;
CDC *pDC = GetDC();
font.CreateFont(38,0,0,0,0,0,0,0,0,1,1,1,1,_T("Arial"));
CFont * oldfont = pDC->SelectObject( &font );
pDC->SetBkMode(TRANSPARENT);//
pDC->SetTextColor(RGB(0, 0,255));//
pDC->TextOut(350,20,result);//
pDC->SelectObject(oldfont);
font.DeleteObject();
ReleaseDC(pDC);
另外,楼主应该在你这个Else的最前后加上CDialog:OnPaint();
我的font定义是乱了,现在已经改好,用font1,font2,font3。不过还是同样的问题。
最后保存老的对象,写完字后再select回去就好了。
非常感谢!
我一般看不保存旧的就运行的很好就没有加,这会吸取教训了。不过我不是很清楚保存旧的字体那么重要啊怎么就?能详细解释下吗?