|
![]() | 作者: hongyang [hongyang]
![]() |
登录 |
各位好: 本人在看书中遇到一个编程的例子,其中有几处很是不懂,望能给予解答、指教!!谢谢!! 一处是关于设置Tab停止位置的,代码如下: int CMsgWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { TEXTMETRIC tm; CDC*pDC=GetDC(); pDC->GetTextMetrics(&tm); m_cxText=tm.tmAveCharWidth; m_cyText=tm.tmHeight; ReleaseDC(pDC); 从此开始: int cx=24; //设置Tab停止位置 for (int i=0;i<7;i++) { m_anTabs[i]=m_cxText*cx+15; cx+=8; } m_cyPixels=m_cyText; return CFrameWnd::OnCreate(lpCreateStruct); } 应用好象是在下面的代码中: void CMsgWnd::ShowMouseState(CString str,CPoint point) { #define LOBIT(b)((b)&0x01) CString strout; strout.Format("%s\tx=%u\ty=%u",str,point.x,point.y); if(m_cyPixels>=m_cyClient-m_cyText) { Invalidate(); m_cyPixels=0; } GetDC()->TabbedTextOut(5,m_cyPixels,strout,7,m_anTabs,0); m_cyPixels+=m_cyText; } 另一处是上面代码中的#define LOBIT(b)((b)&0x01)不懂,请指教!! 还有下面代码中的#define LOBIT(b)((b)&0x01)不懂,如下: void CMsgWnd::ShowKeyInfo(CString str,UINT nChar,UINT nRepCnt,UINT nFlags) { #define LOBIT(b)((b)&0x01) CString strHeader="Message\t Char\t Rep\t Scan\t Ext\t Con\t Prev\t Trans"; CString strOut; strOut.Format("%s\t%c\t%u\t%u\t%u\t%u\t%u\t%u",str,nChar, nRepCnt,LOBYTE(nFlags),LOBIT(nFlags>>8),LOBIT(nFlags>>13),LOBIT(nFlags>>14),LOBIT(nFlags>>15)); if(m_cyPixels>=m_cyClient-m_cyText) { Invalidate(); m_cyPixels=0; } GetDC()->TabbedTextOut(5,0,strHeader,7,m_anTabs,0); GetDC()->TabbedTextOut(5,m_cyPixels,strOut,7,m_anTabs,0); m_cyPixels+=m_cyText; } 望各位给与解答指教!!谢谢!! |
地主 发表时间: 10/07 00:17 |
![]() | 回复: shesh [shesh] ![]() |
登录 |
那只是个宏定义. #define LOBIT(b)((b)&0x01) 比如你用的时候LOBIT(1) 就是1&0x01了. |
B1层 发表时间: 10/07 03:10 |
![]() | 回复: hongyang [hongyang] ![]() |
登录 |
无可非议版主: 您好!很谢谢您的指点,您的解答对我真的很有用,谢谢! 我还想问您上面的那个“设置Tab停止位置”是怎么一回事,我还是不懂,望再指点一下!!谢谢!! 我还想问一下,对于VC类的学习,怎么学才是一个比较好的方法? |
B2层 发表时间: 10/07 10:53 |
![]() | 回复: 286 [unique] ![]() |
登录 |
//设置Tab停止位置 是不是TAB控件中每一个标签的位置呀? 对于TAB控件每一个标签其实就是一个对话框,你在这个文件的同名头文件中找一个m_anTabs是如何定义的,看是控件还是一个其他类型的数组变量。 |
B3层 发表时间: 10/08 17:16 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号