一 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 );