项目中遇到的技术点总结

项目中遇到的技术点总结

一. Sscanf的使用

读取16进制的单个字符。形如”1A 2B 3C 4D 78”,读取的结果为0x1A 0x2B 0x3C 0x4D 0x78.

int n ;

unsigned char c ;

sscanf(pszHexString , “%d” , &n) ;

c = (unsigned char) n ;

这里使用&n,而不用&c的原因是,&c的话,会导致&c之后的3个字节的数据被清空。

因为sscanf中的操作为  *(int*)p = 0x1A ;所以导致buffer overflow。数据被覆盖。

二. VC2005的事件处理


可以很方便的添加:

1, Event

系统中的menu项,本对话框的所有控件等。

2, Override

Override函数

3, Message

本对话框的所有message等。

三. CEdit

有个Edit控件时,如果需要响应该控件上的Enter键,限制可输入字符需求时,需要从CEdit继承一个类,并截获如下message

OnCharOnKeyUp

void CEditEx::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) {

       if ( (char) nChar == '/r' ) {

              if ( m_pfnEnterHandler )    {

                     m_pfnEnterHandler( m_pContext ) ;

              }

       }

       else

       { CEdit::OnKeyUp(nChar, nRepCnt, nFlags); }

}

四. CRichEdit

使用之前,需要调用AfxInitRichEdit2()进行初期化。

设置等宽字体

       CHARFORMAT2 cf ;

       DWORD dw = GetDefaultCharFormat( cf ) ;

       strcpy( cf.szFaceName , "MSゴシック" ) ;

       SetDefaultCharFormat( cf ) ;

           改变字体颜色

       CHARRANGE cr ;

       CHARFORMAT2 cf ;

       memset( &cr , 0 , sizeof(cr) ) ;

       cr.cpMin = 10 ;

       cr.cpMax = 20 ;

       SetSel( cr ) ;

       cf.cbSize = sizeof(cf) ;

       cf.dwMask = CFM_COLOR ;

       cf.crTextColor = RGB( 0xFF , 0 , 0xFF ) ;

       SetSelectionCharFormat( cf ) ;

五. CMSFlexGrid

控件注册:regsvr32 MSFLXGRD.OCX

同时选中多列:设置当前列为1,设置选中列为5。那么从第一列到第五列都被选中。多行同时选中也同样。

动态追加行:使用AddItem,列字符串间由/t分割,第二个参数为插入的行号。

列对齐:ColAlignment属性

HightLight属性,即使失去焦点也显示选中状态

所有EVENT都由控件的父窗口进行处理

 

       char szTLVItem[256] = { 0 } ;

       VARIANT myVar;  

       long lRow = get_Rows() ;

       myVar.vt = VT_I4; // 4BYTE Integer

       myVar.lVal = lRow ; // 行号

 

       sprintf(szTLVItem , "/t%s/t%s/t%s" ,

              pszTag , pszLength , pszValue ) ;

AddItem( szTLVItem, myVar );

你可能感兴趣的:(c,Integer,url,buffer,menu,behavior)