⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 index185.htm

📁 介绍了L C &ouml O S 2&Ecirc 在TM S320VC5402 上的移植以及在移植过程中的一些注意事项, 给出一些关键的实现代码,并在移植的基础上给出了改进堆栈设计以减少对内存需求的方
💻 HTM
字号:
<html>
<style type="text/css"><!--
.p9 {  font-family: "宋体"; font-size: 9pt}a        {text-transform: none; text-decoration: none;}
a:hover {text-decoration: underline; color: #FF0000;}
--></style>
<body background="../di2001.jpg">
<h3 align="center"><font COLOR="#AOAO99"></font></h3>
<table width="100%" border="1" cellspacing="1">
<tr><td><p align="center"><font color="#FF0000">怪异的字体</font></td></tr>
<tr><td><p>
</Br>
我们有一个MFC应用程序,主窗口是在客户区域内画些文本和图形. 我们希望能在客户区域内显示文本,在不需要时则擦除.所以我们先得到一个DC(CClientDC), 然后设置字体和文本颜色就开始写文本,在擦除时,我们用同样的字体,同样的地方用背景色重写文本.<Br>
&nbsp;&nbsp;这种方法绝大部分情况下都工作得很好,但偶尔文本并不能完全擦除,有些像素点依然可见. 好象在写文本时比通常略微胖了些,就象用粗体一样.字体是在写文本时使用的,以后也没有进行过任何的调整. 下面是我们使用的写与擦除的函数.<Br>
void CSign::DrawSignName(CDC* pDC)<Br>
{<Br>
&nbsp;int OldBkMode;<Br>
</Br>
&nbsp;// select the appropriate font<Br>
&nbsp;CFont* pOldFont = (CFont*) pDC->SelectObject(pSignNameFont);<Br>
</Br>
&nbsp;OldBkMode = pDC->SetBkMode(TRANSPARENT);<Br>
</Br>
&nbsp;// determine the colour of the text<Br>
&nbsp;if (IsSignNameVisible())<Br>
&nbsp;&nbsp;pDC->SetTextColor(aColours[SIGN_NAME_COLOUR]);<Br>
&nbsp;else<Br>
&nbsp;&nbsp;pDC->SetTextColor(aColours[DEVICE_INVISIBLE_COLOUR]);<Br>
</Br>
&nbsp;// draw the text<Br>
&nbsp;pDC->TextOut(m_pointNameCoords.x, m_pointNameCoords.y, m_strName);<Br>
</Br>
&nbsp;// restore the previously used font and background mode<Br>
&nbsp;pDC->SelectObject(pOldFont);<Br>
&nbsp;pDC->SetBkMode(OldBkMode);<Br>
</Br>
} // DrawSignName<Br>
&nbsp;&nbsp;函数是在消息句柄中调用的,而参数中的DC是这样建立的:<Br>
CClientDC dc(AfxGetMainWnd()).<Br>
&nbsp;&nbsp;字体是在程序初始化时建立的:<Br>
&nbsp;pSignNameFont = new CFont;<Br>
&nbsp;pSignNameFont->CreateFont(10,5,0,0,150,<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FALSE,FALSE,0,<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ANSI_CHARSET, OUT_DEFAULT_PRECIS,<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEFAULT_PITCH | FF_SWISS, "Helvetica");<Br>
&nbsp;&nbsp;是不是一次使用两个指向同一个客户窗口的DC有问题?程序中的DrawSignName()被多个消息句柄调用。<Br>
</Br>
1)加入以下代码:<Br>
</Br>
{<Br>
m_strName.Empty();<Br>
Invalidate();<Br>
UpdateWindow();<Br>
more stuff;;;<Br>
}<Br>
&nbsp;&nbsp;上面代码会产生一个WM_ERASEBKGND消息,将会用背景色填满窗口,然后再调用OnDraw(),这时只要将字符串置空即可。<Br>
2)我不清楚为什么程序不能正常工作,但我有个主意(它会更快些)可以在显示文本的地方用一个背景色的矩形画一下即可。我也不清楚为什么你们为什么要用透明文本,它将会给图形系统带来大量的工作。字体之所以有这种情况,是否你们安装了文本输出的图形保真软件?它会给你们带来困惑的。<Br>
3)你只想简单的用一个指针来保存一个指向DC的GDI对象,并试图再次调用它时期望它能指向正确的对象。恕我直言,这不是正确的方法(我不知道是否这是显示不正常的唯一原因)将它转化为一个Windows句柄才是正确的:<Br>
//<Br>
// Creating:<Br>
//<Br>
pSignNameFont = new CFont;<Br>
pSignNameFont->CreateFont(10,5,0,0,150,<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FALSE,FALSE,0,<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ANSI_CHARSET, OUT_DEFAULT_PRECIS,<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,<Br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEFAULT_PITCH | FF_SWISS, "Helvetica");<Br>
// Now converting into a windows handle<Br>
m_hSNFont = (HFONT) pSignNameFont->GetSafeHandle();<Br>
&nbsp;&nbsp;直接保存一个对象是不安全的。<Br>
</Br>
</p></td></tr>
</table>
</body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -