现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

十七条VC 使用笔记

2012-07-28 06:50 工业·编程 ⁄ 共 4014字 ⁄ 字号 暂无评论

一 MFC 文件读取
   CFile file;
if(!file.Open( "记录.txt", CFile::modeReadWrite ))
  if(!file.Open( "记录.txt", CFile::modeCreate|CFile::modeReadWrite))
   file.Abort();
file.Write( szBuf1, 1023 );
file.Close();
二 MFC多线程应用
1 工作线程
   //声明
   CWinThread *pThread;
   HWND hWnd;
   //启动线程
   hWnd=GetSafeHwnd();
   pThread=AfxBeginThread( pfnThreadProc, hWnd );
   //线程调用类成员及函数
   CMobileDogDlg*     dlg   =   (CMobileDogDlg*)(::AfxGetApp()->m_pMainWnd);

三 MFC 简单定时器
ON_WM_TIMER()
    SetTimer(1001,500,NULL);
    afx_msg void OnTimer(UINT_PTR nIDEvent);
    switch(nIDEvent)

四 设置STATIC文字以及颜色
4.1
   if (pWnd->GetDlgCtrlID() == IDC_STATIC)
     {
         //pDC->SetTextColor(RGB(255, 0, 0));
   CFont * cFont=new CFont;  
   cFont->CreateFont( 32,0,0,0,FW_SEMIBOLD,FALSE,FALSE,0,
    ANSI_CHARSET,OUT_DEFAULT_PRECIS,                           
    CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,                        
    DEFAULT_PITCH&FF_SWISS,"TrueType");

   pWnd->SetFont(cFont);
     }
    4.1.1 STATIC 背景透明显示
pDC->SetBkMode(TRANSPARENT);
    return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
  4.1.2 控制显示方向
ModifyStyle(0,SS_CENTER);
  4.1.3 设置内容/获取内容
   SetDlgItemTextDraw(ID_TOTALAMOUT, "12.26 " );
      GetDlgItemText(ID_PayAmout, temBuff );

  4.2 设置详细字体
VERIFY(
      m_font_100.CreateFont(
      100,                        // nHeight
      0,                         // nWidth
      0,                         // nEscapement
      0,                         // nOrientation
      FW_BOLD,                // nWeight
      FALSE,                     // bItalic
      FALSE,                     // bUnderline
      0,                         // cStrikeOut
      ANSI_CHARSET,              // nCharSet
      OUT_DEFAULT_PRECIS,        // nOutPrecision
      CLIP_DEFAULT_PRECIS,       // nClipPrecision
      DEFAULT_QUALITY,           // nQuality
      DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
      "LcdD")                   // lpszFacename
      );
     GetDlgItem(ID_PlateNum)->SetFont(&m_font_100);
  4.3 PICTUR 控件加载图片
m_flash.SetBitmap( ::LoadBitmap( AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_GETTRAY) ) );

五 记一个小技巧:
如何把一个数调到一个给定数字的整数倍,比如8的整数倍。给定10,那就应该返回16。给定7就应该返回8。有个比较快的方法。记在这里。万一以后用的上。
static  const int ALIGN = 8;//any number u want
int RoudUp(const int a){
return  (a + ALIGN -1) & (~(ALIGN-1));
}

六 MFC 窗口透明处理
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^1000000);
HINSTANCE hInst= LoadLibraryA("User32.dll");
if(hInst)
{
  typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);

  MYFUNC fun=NULL;
  fun=(MYFUNC)GetProcAddress(hInst,"SetLayeredWindowAttributes");
  if(fun) fun(this->GetSafeHwnd(),0,158,2);
  FreeLibrary(hInst);
}

七.C语言下获取文件长度:
fseek( pFile, 0, SEEK_END );
    long nFileLen = ftell( pFile );
    fseek( pFile, 0 , SEEK_SET );

八.MFC 开启控制台
AllocConsole();                                          // 开启控制台
  SetConsoleTitle(_T("Debug Output"));      // 设置控制台窗口标题
  freopen("CONOUT$","w",stdout);

宏:TRACE

九 Cstring强制转换char * 使用(LPSTR)(LPCTSTR)

十 按钮加载图片
设置按钮属性为OWN DRAW
  CBitmapButton m_btReset;
  m_btReset.SubclassDlgItem(IDC_BUTTON8,this);//关联按钮控件;
m_btReset.LoadBitmaps( IDB_BIDOWN1, IDB_BITDOWN );
m_btReset.SizeToContent();
十一 获取窗口句柄
  AfxGetInstanceHandle
  AfxGetApp
十二. MFC手动添加SOCKET
#include <afxsock.h>
  CSocket m_Client;
  AfxSocketInit();
m_Client.Create( );
m_Client.Connect( );
十三 ListControl 选择整行, 显示网格线
  m_wndList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

十四 位图拉伸缩放 失真解决
SetStretchBltMode(pDC->m_hDC,HALFTONE );
pDC->StretchBlt( IMG_X+140, IMG_Y, IMG_SIZEX/4, IMG_SIZEY/  
4,&MemDC,0,0, IMG_SIZEX, IMG_SIZEY, SRCCOPY);//读取的图大
小;

十五 界面线程UI的创建, 以及线程通信

线程类CUIThread  , 线程UI类CUIThreadDlg

CUIThread *pThread =(CUIThread*)AfxBeginThread(RUNTIME_CLASS(CUIThread)); 
pThread->PostThreadMessage( WM_CALCULATE, NULL, NULL );

UI创建

m_dlg.Create(IDD_SOV_MANEGERTH);
m_dlg.ShowWindow(SW_SHOW);
//m_pMainWnd=&m_dlg;

m_dlg.DestroyWindow();

十六  界面STATIC控件更新闪烁问题解决方案

UpdateWindowRect(nID);
CRect rtlbl;
GetDlgItem(nID)->GetWindowRect(&rtlbl);
ScreenToClient(&rtlbl); //转到客户端界面;
//InvalidateRect(&rtlbl);//最后刷新对话框背景;
SetDlgItemText(nID,strvalue);
if ( sign == 1 )
{
  ReFlush  = TRUE;
}
else if( sign == 2 )
{
  UpdateData();
}

十七  父窗口等多窗口控件控制解决方案(TABCTRL,线程等层叠窗口)

CMyTabExampleDlg *tbDlg = (CMyTabExampleDlg*)AfxGetMainWnd();
CDialog * threeDlg = tbDlg->m_tabMyTabCtrl.m_tabPages[2];

threeDlg->SetDlgItemText(IDC_EDIT2, temBuff );

给我留言

留言无头像?