亚冠

编程技巧20法之五

2019-12-05 10:02:56来源:励志吧0次阅读

11.如何判断当前操作系统的版本

//-----------------------------------------------------------------------------//判断操作系统涵数及变量,jingzhou xutypedef enum tagWin32SysType{Windows32s,WindowsNT3,Windows95,Windows98,WindowsME,WindowsNT4,Windows2000,WindowsXP}Win32SysType;//判断操作系统涵数及变量,jingzhou xuWin32SysType IsShellSysType(){Win32SysType ShellType;DWORD winVer;OSVERSIONINFO *osvi;winVer=GetVersion();if(winVer<0x80000000){/*NT */ShellType=WindowsNT3;osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));if (osvi!=NULL){memset(osvi,0,sizeof(OSVERSIONINFO));osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);GetVersionEx(osvi);if(osvi->dwMajorVersion==4L)ShellType=WindowsNT4;else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==0L)ShellType=Windows2000;else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==1L)ShellType=WindowsXP;free(osvi);}}else if (LOBYTE(LOWORD(winVer))<4)ShellType=Windows32s;else{ShellType=Windows95;osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));if (osvi!=NULL){memset(osvi,0,sizeof(OSVERSIONINFO));osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);GetVersionEx(osvi);if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==10L)ShellType=Windows98;else if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==90L)ShellType=WindowsME;free(osvi);}}return ShellType;}//-----------------------------------------------------------------------

12.如何在指定矩形框内水平/垂直显示多行文字

/////////////////////////////////////////////////////////说明:// 在矩形框中水平或垂直显示多行文字,jingzhou xu.// lMode: 排列方式,0:水平方式; 1:垂直对齐// lHori: 水平对齐方式, 0:左对齐; 1:居中; 2:右对齐; 3:自定义// lVert: 垂直对齐方式, 0:顶对齐; 1:居中; 2:底对齐; 3:自定义///////////////////////////////////////////////////////CRect DrawTitleInRect(CDC *pDC, CString szString, LPRECT lpRect, long lMode, long lHori, long lVert){TEXTMETRIC tm;pDC->GetTextMetrics(&tm);int tmpWidth=tm.tmAveCharWidth, tmpHeight=tm.tmHeight;CRect rcInner(lpRect);if(lMode==0){rcInner.left+=tmpWidth;rcInner.right-=tmpWidth;rcInner.top-=tmpWidth;rcInner.bottom+=tmpWidth;}if(lMode==1){rcInner.left+=tmpWidth;rcInner.right=rcInner.left+tmpWidth;rcInner.top-=tmpWidth;rcInner.bottom+=tmpWidth;}pDC->DrawText(szString, rcInner,DT_CALCRECT);switch(lHori){case 0:break;case 1:{long xOutCent=(lpRect->right+lpRect->left)/2;long xInnCent=(rcInner.right+rcInner.left)/2;rcInner.left+=(xOutCent-xInnCent);rcInner.right+=(xOutCent-xInnCent);}break;case 2:{long lInWidth=rcInner.right-rcInner.left;rcInner.right=lpRect->right-tmpWidth;rcInner.left=rcInner.right-lInWidth;}break;default:break;}switch(lVert){case 0:break;case 1:{long yOutCent=(lpRect->bottom+lpRect->top)/2;long yInnCent=(rcInner.bottom+rcInner.top)/2;rcInner.top-=(yInnCent-yOutCent);rcInner.bottom-=(yInnCent-yOutCent);}break;case 2:{long lInHeigh=rcInner.top-rcInner.bottom;rcInner.bottom=lpRect->bottom+tmpWidth;rcInner.top=rcInner.bottom+lInHeigh;}break;default:break;}//------------------------------------------------------------------------------//功能:根据新、老矩形,重新计算行数,使文字多行显示,jingzhou xu//-------------------------------------------------------------------------------//一行中最大字符数int nMaxLineChar = abs(lpRect->right - lpRect->left) / tmpWidth ;//记录当前行的宽度short theLineLength=0; //记录当前行中汉字字节数,以防止将一半汉字分为两行unsigned short halfChinese=0;for(int i=0; i<=szString.GetLength()-1; i++){if(((unsigned char)szString.GetAt(i) == 0x0d) && ((unsigned char)szString.GetAt(i+1) == 0x0a))theLineLength=0;//大于0xa1的字节为汉字字节if((unsigned char)szString.GetAt(i) >= 0xA1)halfChinese++;theLineLength++;//如果行宽大于每行最大宽度,进行特殊处理if(theLineLength > nMaxLineChar){//防止将一个汉字分为两行,回溯if(halfChinese%2){szString.Insert(i,(unsigned char)0x0a);szString.Insert(i,(unsigned char)0x0d);}else{szString.Insert(i-1,(unsigned char)0x0a);szString.Insert(i-1,(unsigned char)0x0d);}theLineLength = 0;}}//重新计算矩形边界范围//int tmpLine = int(abs(szString.GetLength()*tmpWidth / abs(lpRect->right - lpRect->left)-0.5));//tmpLine += (szString.GetLength()*tmpWidth % abs(lpRect->right - lpRect->left))? 1 : 0;//if(tmpLine == 0)//tmpLine = 1;if(rcInner.bottom > lpRect->bottom)rcInner.bottom = lpRect->bottom;if(rcInner.top < lpRect->top)rcInner.top = lpRect->top;//------------------------------------------------------------------------------if(lHori==0)pDC->DrawText(szString, rcInner, DT_WORDBREAK|DT_LEFT);else if(lHori==1)pDC->DrawText(szString, rcInner, DT_WORDBREAK|DT_CENTER);else if(lHori==2)pDC->DrawText(szString, rcInner, DT_WORDBREAK|DT_RIGHT);return rcInner;}

查看本文来源

哮喘病医院张加兰
广元市第三人民医院
绵阳治疗包皮包茎医院
六盘水癫痫病医院哪家最正规
深圳妇科哪个医院看的好
分享到: