MFC 知识总结(3)

一.UNICODE编码
1.Windows下定义的Unicode的数据类型有哪些?
WCHAR unicode字符 PWSTR 指向Unicode字符串的指针
PCWSTR 指向一个恒定的UNICODE的字符串的指针。
对应的ANSI数据类型为CHAR,LPSTR和LPCTSTR
ANSI/UNICODE通用数据类型为TCHAR,PTSTR,LPCTSTR

2.如何对Unicode进行操作

ANSI 操作函数以str开头 strcpy
Unicode 操作函数以wcs开头 wcscpy
MBCS 操作函数以_mbs开头 _mbscpy
ANSI/Unicode 操作函数以_tcs开头 _tcscpy(C运行期库)
ANSI/Unicode 操作函数以lstr开头 lstrcpy(Windows函数)

3.如何表示Unicode字符串常量?
字符集 实例
ANSI “string”
Unicode L“string”
ANSI/Unicode T(“string”)或_TEXT(“string”)
if( szError[0] == _TEXT(‘J’) )

4.如何编写符合ANSI和Unicode的应用程序?

(1) 将文本串视为字符数组,而不是chars数组或字节数组。
(2) 将通用数据类型(如TCHAR和PTSTR)用于文本字符和字符串。
(3) 将显式数据类型(如BYTE和PBYTE)用于字节、字节指针和数据缓存。
(4) 将TEXT宏用于原义字符和字符串。
(5) 执行全局性替换(例如用PTSTR替换PSTR)。
(6) 修改字符串运算问题。例如函数通常希望在字符中传递一个缓存的大小,而不是字节。这意味着不应该传递sizeof(szBuffer),而应该传递(sizeof(szBuffer)/sizeof(TCHAR)。另外,如果需要为字符串分配一个内存块,并且拥有该字符串中的字符数目,那幺请记住要按字节来分配内存。这就是说,应该调用
malloc(nCharacters *sizeof(TCHAR)),而不是调用malloc(nCharacters)。
二、Windows打印

TCHAR szprinter[80];

HDC hdcprint; // 定义一个设备环境句柄 
//定义一个打印作业 
 static DOCINFO di={sizeof(DOCINFO),_T("printer"),NULL}; 
 // 得到设备字符串存入数组szprinter中 
 GetProfileString(_T("windows"),_T("device"),_T(",,,"),szprinter,80); 

TCHAR *szDevice=wcstok(szprinter,_T(","));
TCHAR *szDriver=wcstok(NULL,_T(","));
TCHAR *szOutput=wcstok(NULL,_T(","));


 // 将设备字符串分解 
 //if(NULL!=(szDevice=strtok(szprinter,","))&&NULL!=(szDriver=strtok(NULL,","))&& 
//NULL!=(szOutput=strtok(NULL,","))) 
  // 创建一个打印机设备句柄 
  if((hdcprint=CreateDC(szDriver,szDevice,szOutput,NULL))!=0) 
  { 
   if(StartDoc(hdcprint,&di)> 0) //开始执行一个打印作业 
   { 
    StartPage(hdcprint); //打印机走纸,开始打印 
    SaveDC(hdcprint); //保存打印机设备句柄 
    // 输出一行文字 
    TextOut(hdcprint,1,1,_T("热烈祝贺编程实例出版发行!"),16); 
    RestoreDC(hdcprint,-1); //恢复打印机设备句柄 
    EndPage(hdcprint); //打印机停纸,停止打印 
    EndDoc(hdcprint); //结束一个打印作业 
    //MessageBox("打印完毕!","提示",MB_ICONINFORMATION); 
   } 
   // 用API函数DeleteDC销毁一个打印机设备句柄 
   DeleteDC(hdcprint); 
 // } 
 // else 
 // { 
   //MessageBox("没有默认打印机,或者没有安装打印机!"); 
 //  return true; 
 // }
  }
 return true;
//使用默认的打印机直接打印

三、设置背景颜色

1.先定义CBrush   m_brush; 
  然后在初始发m_brush.CreateSolidBrush(   RGB(   255,   255,   255   )   ); 

重载OnCtlColor //指示即将绘制一个控件
HBRUSH   CAboutDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)   
{ 
     HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor); 

    pDC-> SetBkMode(   TRANSPARENT   ); 
pDC-> SetTextColor(   RGB(   0,   128,   128)   ); 

//   TODO:   Return   a   different   brush   if   the   default   is   not   desired 
if(   nCtlColor   ==   CTLCOLOR_DLG   ) 
return   (HBRUSH)   m_brush.GetSafeHandle(   ); 
if(   nCtlColor   ==   CTLCOLOR_STATIC   ) 
return   (HBRUSH)   m_brush.GetSafeHandle(   ); 
/**************************************************/
LOGBRUSH   logbrush;   
 COLORREF     bkcolor(RGB(117,119,117));   
 logbrush.lbHatch   =   0;   
 logbrush.lbStyle   =   BS_SOLID;   
 logbrush.lbColor   =bkcolor;   
 logbrush.lbColor   =bkcolor;   
 HBRUSH   m_hBrush=(HBRUSH)::CreateBrushIndirect(&logbrush);//使用这个
/*******************************************************/
return   hbr; 
} 
对话框背景颜色
 OnEraseBkgnd中实现;
  CBrush br;
  Rect rc;
  br.CreateSolidBrush(RGB(0,0,0));
  GetClientRect(&rc);  //取得客户区边界
  pDc->FillRect(&rc,&br);

初始化Instance中
//设置对话框背景和文本颜色
    SetDialogBkColor(RGB(160,180,220),RGB(0,0,0));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值