VC++编程常见问题

上传人:人*** 文档编号:469704300 上传时间:2023-12-30 格式:DOCX 页数:6 大小:26.16KB
返回 下载 相关 举报
VC++编程常见问题_第1页
第1页 / 共6页
VC++编程常见问题_第2页
第2页 / 共6页
VC++编程常见问题_第3页
第3页 / 共6页
VC++编程常见问题_第4页
第4页 / 共6页
VC++编程常见问题_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《VC++编程常见问题》由会员分享,可在线阅读,更多相关《VC++编程常见问题(6页珍藏版)》请在金锄头文库上搜索。

1、VC+编程常见问题51、如何创建一个具有特定点大小的字体 可以指定字体逻辑单位的大小,但有时指定字体的点的大小可能会更方便一些。可以如下将字体的点转换为字体的高度: int nHeigth=mulDiv (nPointSize, -dc.GetDeviceCaps (LOGPIXELSY), 72); 下例创建了一个8点的Apial字体: CClientDC dc (AqfxGetMainWnd (); m_font. CreateFont (MulDiv (8, -dc.GetDeviceCaps (LOGPIXELSY), 72),0,0,0,FW_NORMAL,0,0,0,ANSI_CH

2、ARSET, OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY, VARIABLE_PITCH | FF-SWISS,_T (Arial); . 52、如何计算一个串的大小 函数CDC: Det text Extent 根据当前选择的字体计算一个串的高度和宽度。如果使用的不是系统字体而是其他字体,则在调用GetTextExtent之前将字体选进设备上下文中是很重要的,否则计算高度和宽度时将依据系统字体,由此得出的结果当然是不正确的。下述样板程序当改变下压按钮的标题时动态调整按钮的大小,按钮的大小由按钮的字体和标题的大小而定。响应消息WM_SE

3、TTEXT时调用OnSetText,该消息使用ON_MESSAE宏指令定义的用户自定义消息。 LRESULT CMyButton: OnSettext (WPARAM wParam, LPARAM lParam) /Pass message to window procedure. LRESULT bResult=CallWindowProc (*GetSuperWndProcAddr (), m_hWnd, GetCurrentMessage () -message,wParam,lParam); /Get title of push button. CString strTitle; Ge

4、tWindowText (strTitle); /Select current font into device context. CDC* pDC=GetDc (); CFont*pFont=GetFont (); CFont*pOldFont=pDC-SelectObject (pFont); /Calculate size of title. CSize size=pDC-GetTextExent (strTitle,strTitle.GetLength (); /Adjust the buttons size based on its title. /Add a 5-pixel bor

5、der around the button. SetWindowPos (NULL, 0, 0, size.cx+10, size.cy+10, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); /Clean up. pDC-SelectFont (pOldFont); ReleaseDC (pDC); return bResult; 53、如何显示旋转文本 只要用户使用TrueType或者GDI笔或字体就可以显示旋转文本(有些硬件设备也支持旋转光栅字体)。LOGFONT结构中的ifEscapement成员指定了文本行和x轴的角度,角度的单位是十分之一度

6、而不是度,例如,ifEscapement为450表示字体旋转45度。为确保所有的字体沿坐标系统的同一方向旋转,一定要设置ifEscapement成员的CLIP_LH_ANGLES位,否则,有些字体可能反向旋转。下例使用了14点Arial字体每间隔15度画一个串。 void CSampleView: OnDraw (CDC* pDC) /Determine the size of the window. CRect rcClient; GetClientRect (rcClient); /Create sample string. CString str (_T (WheeeeI am rota

7、ting!); /Draw transparent, red text. pDC-SetBkMode (TRANSPARENT); pDC-SetTextColor (RGB (255,0,0); CFont font; /font object LOGFONT stFont; /font definition /Set font attributes that will not change. memset (&stFont, 0, sizeof (LOGFONT); stFont.ifheight=MulDiv (14, -pDC-GetDeviceCaps (LOGPIXELSY), 7

8、2); stFont.ifWeight=FW_NORMAL; stFont.ifClipPrecision=LCIP_LH_ANGLES; strcpy (stFont.lfFaceName, Arial); /Draw text at 15degree intervals. for (int nAngle=0; nAngleSelectObject (&font); /Draw the text. pDC-SelectObject (pOldFont); font.DelectObjext (); 54、如何正确显示包含标签字符的串 调用GDI文本绘画函数时需要展开标签字符,这可以通过调用C

9、DC: TabbedTextOut或者CDC: DrawText并指定DT_EXPANDTABS标志来完 成。TabbedTextOut函数允许指定标签位的数组,下例指定每20设备单位展开一个标签: void CSampleView: OnDraw (CDC* pDC) CTestDoc* pDoc=GetDocument (); ASSERT_VALID (pDoC); CString str; str.Format (_T (CathytNormantOliver); int nTabStop=20; /tabs are every 20 pixels pDC-TabbedtextOut

10、(10, 10, str, 1, &nTabStop, 10); 55、串太长时如何在其末尾显示一个省略号 调用CDC: DrawText并指定DT_END_ELLIPSIS标志,这样就可以用小略号取代串末尾的字符使其适合于指定的边界矩形。如果要显示路径信息,指定DT_END_ELLIPSIS标志并省略号取代串中间的字符。 void CSampleView: OnDraw (CDC* pDC) CTestDoc* pDoc=GetDocument (); ASSERT_VALID (pDoc); /Add ellpsis to end of string if it does not fit

11、pDC-Drawtext (CString (This is a long string), CRect (10, 10, 80, 30), DT_LEFT | DT_END_ELLIPSIS); /Add ellpsis to middle of string if it does not fit pDC-DrawText (AfxgetApp () -m_pszhelpfilePath, CRect (10, 40, 200, 60), DT_LEFT | DT_PATH_ELLIPSIS); 56、如何快速地格式化一个CString对象 调用CString: Format,该函数和pri

12、ntf函数具有相同的参数,下例说明了如何使用Format函数: /Get size of window. CRect rcWindow; GetWindowRect (rcWindow); /Format message string. CString strMessage; strMessage.Format (_T (Window Size (%d, %d), rcWindow.Width (), rcWindow.Height (); /Display the message. MessageBox (strmessage); 57、为什么即使调用EnableMenuItem菜单项后,菜

13、单项还处于禁止状态 需要将CFrameWnd: m_bAutomenuEnable设置为FALSE,如果该数据成员为TRUE(缺省值),工作框将自动地禁止没有ON_UPDATE_COMMAND_UI或者ON_COMMAND的菜单项。 /Disable MFC from automatically disabling menu items. m_bAuoMenuEnable=FALSE; /Now enable the menu item. CMenu* pMenu=GetMenu (); ASSERT_VALID (pMenu); pMenu-EnableMenuItem (ID_MENU_ITEM,MF_BYCOMMAND | MF_ENABLED); 58、如何

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 工业自动化

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号