VC基本常识.docx
《VC基本常识.docx》由会员分享,可在线阅读,更多相关《VC基本常识.docx(17页珍藏版)》请在冰豆网上搜索。
VC基本常识
VC基本常识(转)
(2010-02-0308:
35:
34)
转载
标签:
类对象
this
if
tpm
it
分类:
C/CPP
AfxMessageBox("Copy");表示弹出一个消息框消息是Copy;
1.启动界面的步骤
a.创建一个单文档框架
b.在工程菜单里选择添加工程
c.在添加工程里选择ComponentsandControlsGallery
d.ComponentsandControlsGallery里选VisuanC++Components
e.VisuanC++Components里选择SplashScreen控件
f.如果想改动启动界面只需要加入新的位图替换原来的位图
g.如果想延长界面显示时间可以调节SetTimer(1,1520,NULL);第一个参数对应nIDEvent
2.给菜单里添加位图的步骤
a.创建一个单文档框架
b.在视类里添加CBitmap类对象;需要几个位图就添加几个对象
c.在视类的构造函数里调用CBitmap类对象的成员函数LoadBitmap(位图ID);
初始化CBitmap类对象
d.在视类里的OnDraw(CDC*pDC)函数添加一下函数
e. CWnd*parent=GetParent();
CMenu*pmenubar=parent->GetMenu();
CMenu*pmenu=pmenubar->GetSubMenu(0);
pmenu->SetMenuItemBitmaps(0,MF_BYPOSITION,&bm_New,&bm_New);
pmenu->SetMenuItemBitmaps(1,MF_BYPOSITION,&bm_Open,&bm_Open);
pmenu->SetMenuItemBitmaps(2,MF_BYPOSITION,&bm_Save,&bm_Save);
3.改变主窗口的大小形状的步骤!
a.创建一个单文档框架
b在MainFrm类中添加消息函数WM_SIZE(OnSize())
c在OnSize()中添加一下函数就可以了:
d CRgnm_rgn;
CRectrc;
GetWindowRect(&rc);
rc-=rc.TopLeft();
m_rgn.CreateRoundRectRgn(rc.left,rc.top,rc.right,rc.bottom,100,100);
SetWindowRgn(m_rgn,TRUE);
4把主窗口分成几部分的步骤
a.创建一个单文档框架
b在MainFrm类中重载虚拟函数OnCreateClient(在类向导里可以找到该虚拟函数)
c.在MainFrm类中添加CSplitterWndm_Splitter类对象;
d.OnCreateClient虚拟函数中添加如下代码
CRectcr;
GetClientRect(&cr);
CSizepaneSize(cr.Width()/3,cr.Height()/3);
m_Splitter.CreateStatic(this,3,1);
m_Splitter.CreateView(0,0,RUNTIME_CLASS(CExampleView),paneSize,pContext);
m_Splitter.CreateView(1,0,RUNTIME_CLASS(CExampleView),paneSize,pContext);
m_Splitter.CreateView(2,0,RUNTIME_CLASS(CExampleView),paneSize,pContext);
returnTRUE;
5.在主窗口的两边创建滚动条的步骤
a.创建一个单文档框架
b在MainFrm类中重载虚拟函数OnCreateClient(在类向导里可以找到该虚拟函数)
c.在MainFrm类中添加CSplitterWndm_Splitter类对象;
d.OnCreateClient虚拟函数中添加如下代码
returnm_Splitter.Create(this,2,2,CSize(10,10),pContext);
6.创建透明图形的步骤
a.创建一个对话框框架
b.在OnInitDialog()函数中添加以下代码,画出图形
HRGNm_wndRgn;
CClientDCdc(this);
CFontmFont;
mFont.CreateFont(200,50,0,0,FW_HEAVY,FALSE,FALSE,0,ANSI_CHARSET,
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"宋体");
//openapathbrackets,anapplicationcanbegincallingGDI
//drawingfunctionstodefinethepointsthatlieinthepath.
dc.BeginPath();
dc.SetBkMode(TRANSPARENT);
CFont*pOldFont;
pOldFont=dc.SelectObject(&mFont);
dc.TextOut(0,0,"◎◎");
dc.EndPath();
m_wndRgn=:
:
PathToRegion(dc);
this->SetWindowRgn(m_wndRgn,TRUE);
dc.SelectObject(pOldFont);
c.进入MFCClassWizard,在ClassInfo下的Messagefilter选择Window,
然后在回到MessageMaps中找到(WM_NCHITTEST)添加该消息函数
图形就会随着鼠标移动
d.在该消息函数中添加以下代码
UINTnHitTest=CDialog:
:
OnNcHitTest(point);
return(nHitTest==HTCLIENT)?
HTCAPTION:
nHitTest;
7.创建界面缓缓进入,缓缓退出的效果
a.创建一个单文档框架
b.在StdAfx.h文件的开始部分添加以下代码
#undefWINVER
#defineWINVER0x500
c.在OnCreate()消息函数中添加以下代码
AnimateWindow(GetSafeHwnd(),1000,AW_SLIDE|AW_HOR_POSITIVE);
d.创建OnClose()消息函数并添加以下代码
AnimateWindow(GetSafeHwnd(),1000,AW_HIDE|AW_CENTER);
8.给某一个控件设置鼠标,比如给button按钮设置鼠标的步骤
a.创建一个对话框框架
b.在MFCClassWizard创建(WM_SETCURSOR)消息函数
c.在该函数下添加以下代码
CStringsClassName;
HCURSORm_Cursor;
:
:
GetClassName(pWnd->GetSafeHwnd(),sClassName.GetBuffer(80),80);
if(sClassName=="Button")
{
m_Cursor=AfxGetApp()->LoadCursor(IDC_CURSOR1);
:
:
SetCursor(m_Cursor);
returnTRUE;
}
9.在对话框中添加menu菜单的步骤
a.创建一个对话框框架
b.在ResourseView中建立Menu菜单,
c.在ResourseView中打开Dialog对话框在属性对话框里在MENU选项下选择
10.在对话框中添加ToolBar的步骤
a.创建一个对话框框架
b.在ResourseView中建立Toolbar工具条
c.在Dialog类的OnInitDialog()函数中添加以下代码
CRectrect;
GetClientRect(rect);
if(!
m_wndToolBar.Create(this))
{
TRACE0("Failedtocreatetoolbar\n");
return-1; //failtocreate
}
m_wndToolBar.LoadToolBar(IDR_TOOLBAR1);
m_wndToolBar.MoveWindow(100,0,rect.right,32);
d.根据Toolbar里的图形ID号!
创建一个消息函数!
添加以下代码
AfxMessageBox("Click!
");单击该图型就会有个消息框!
e.
11.在对话框中添加StatusBar的步骤
a.创建一个对话框框架
b.在StringTable中添加两个状态值
c.在对话框类.h里添加CStatusBar类对象;
d.在对话框类.cpp里添加以下代码:
staticUINTindicators[]=
{
IDS_PANEL1,//为StringTabl里添加的ID值
IDS_PANEL2,
};
和OnInitDialog()函数里添加
CRectrect;
GetClientRect(rect);
//状态条
if(!
m_wndStatusBar.Create(this)||!
m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("未能创建状态栏\n");
return-1; //未能创建
}
m_wndStatusBar.MoveWindow(0,rect.bottom-20,rect.right,20);
12.添加CDialogBar的步骤
a.创建一个单文档框架
b.在MainFrm.h中添加一个public:
型CDialogBarm_wndDialogBar对象;
c.在MainFrm.cpp中的OnCreate(LPCREATESTRUCTlpCreateStruct)函数中添加如下代码
m_wndDialogBar.Create( this,IDD_DIALOG1,CBRS_TOP|CBRS_GRIPPER|
CBRS_TOOLTIPS|CBRS_FLYBY|
CBRS_SIZE_DYNAMIC,
IDD_DIALOG1);
m_wndDialogBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndDialogBar);
13.制作橡皮球的步骤
a.创建一个单文档框架
b.在视图类.h中添加CRectTrackerm_tracker;类对象,和左键消息
c.在视图类的初始化函数中添加以下代码
m_tracker.m_rect.SetRect(0,0,30,30);
m_tracker.m_nStyle=CRectTracker:
:
resizeInside|CRectTracker:
:
dottedLine;
d.在视图类的OnDraw()函数中添加以下代码
CBrushbrush(RGB(0,255,255));
CBrush*pOldBrush=pDC->SelectObject(&brush);
CRectrcEllipse;
m_tracker.GetTrueRect(rcEllipse);
pDC->Ellipse(rcEllipse);
m_tracker.Draw(pDC);
pDC->SelectObject(pOldBrush);
c.在视图类的OnLButtonDown()消息函数中添加以下代码
CExampleDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
BOOLbResult=m_tracker.HitTest(point)!
=CRectTracker:
:
hitNothing;
if(bResult)
{
m_tracker.Track(this,point,true);
pDoc->SetModifiedFlag();
pDoc->UpdateAllViews(NULL);
}
else
m_tracker.TrackRubberBand(this,point,true);
14。
给右键添加属性的步骤
a.创建一个对话框框架
b.加入一个Menu资源
c.创建WM_CONTEXTMENU消息函数并加入以下代码
CMenumenu;
menu.LoadMenu(IDR_MENU1);
menu.GetSubMenu(0)->TrackPopupMenu(
TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,
point.x,point.y,this);
单击右键就可以出现属性条
15.改变对话框图标的方法
a.创建一个对话框框架
b.创建两个图标其ID值分别为(IDI_ICON1);(IDI_ICON2);
c.添加WM_LBUTTONDOWN消息并添加如下代码
HICONhIcon=AfxGetApp()->LoadIcon(IDI_ICON1);
ASSERT(hIcon);
AfxGetMainWnd()->SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);
//修改大图标
AfxGetMainWnd()->SendMessage(WM_SETICON,FALSE,(LPARAM)hIcon);
//修改小图标
d.添加WM_RBUTTONDOWN消息并添加如下代码
HICONhIcon=AfxGetApp()->LoadIcon(IDI_ICON2);
ASSERT(hIcon);
AfxGetMainWnd()->SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);
//修改大图标
AfxGetMainWnd()->SendMessage(WM_SETICON,FALSE,(LPARAM)hIcon);
//修改小图标
16.切换菜单语言的步骤
a.创建一个单文档框架
b.创建两个一样菜单,分别用中英文表示
c.在MainFrm.h中创建两个菜单对象用于保存中英文资源
d.根据menu_id号创建两个消息函数分别加入以下号码:
SetMenu(&m_pChinese);//把菜单设置为汉语
SetMenu(&m_pEnglish);//把菜单设置为英语
e.在OnCreate()函数中加入如下代码
m_pChinese.LoadMenu(IDR_MAINFRAME_CN);//调入中文菜单资源
m_pEnglish.LoadMenu(IDR_MAINFRAME_EN);//调入英文菜单资源
SetMenu(&m_pEnglish);
17。
在状态栏里显示时间的步骤
a.创建一个单文档框架
b.在stringTable里添加ID_INDICATOR_CLOCK标识号标题为0000-00-0000:
00:
00
c.创建WM_TIMER消息函数并如以下代码
if(nIDEvent==1)
{
CTimet;
t=CTime:
:
GetCurrentTime();
CStringstr=t.Format("%Y-%m-%d%H:
%M:
%S");
m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(
ID_INDICATOR_CLOCK),str);
}
d.创建WM_CLOSE消息函数并加入以下代码
KillTimer
(1);
e.OnCreate()函数里添加以下代码
SetTimer(1,500,NULL);
f在MainFrm.h的开头处加入以下代码替换原来的代码
staticUINTindicators[]=
{
ID_SEPARATOR, //statuslineindicator
ID_INDICATOR_CLOCK,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
18.创建透明背景的步骤
a.创建一个对话框框架
b。
在OnInitDialog()函数里添加以下代码
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
//加入WS_EX_LAYERED扩展属性
HINSTANCEhInst=LoadLibrary("User32.DLL");
if(hInst)
{
typedefBOOL(WINAPI*MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNCfun=NULL;
fun=(MYFUNC)GetProcAddress(hInst,"SetLayeredWindowAttributes");
//取得SetLayeredWindowAttributes函数指针
if(fun)fun(this->GetSafeHwnd(),0,129,2);
FreeLibrary(hInst);
}
19.画直线的步骤
a.创建一个单文档框架
b.在视图类.h中添加CPointm_StartPoint;类对象
c.添加WM_LBUTTONDOWN消息添加如下代码
m_StartPoint=point;
SetCapture();
d.添加WM_LBUTTONUP消息,加如下代码
if(GetCapture()==this)
{
CClientDCdc(this);
ReleaseCapture();
dc.MoveTo(m_StartPoint);
dc.LineTo(point);
}
20。
另一种画直线的步骤
a.创建一个单文档框架
b.在视图类.h中添加CPointm_StartPoint,m_LastEndPoint;类对象
c.添加WM_LBUTTONDOWN消息添加如下代码
m_StartPoint=point;
m_LastEndPoint=point;
SetCapture();
d.添加WM_LBUTTONUP消息,加如下代码
if(GetCapture()==this)
{
CClientDCdc(this);
ReleaseCapture();
dc.MoveTo(m_StartPoint);
dc.LineTo(point);
}
e.添加WM_MOUSEMOVE消息,加入如下代码
if(nFlags&&MK_LBUTTON)
{
CClientDCdc(this);
intnDrawMode=dc.GetROP2();
dc.SetROP2(R2_NOTXORPEN);
dc.MoveTo(m_StartPoint);
dc.LineTo(m_LastEndPoint);
dc.MoveTo(m_StartPoint);
dc.LineTo(point);
m_LastEndPoint=point;
dc.SetROP2(nDrawMode);
}
21.在对话框中显示位图的步骤
a.创建一个对话框框架
b.先创建两个位图
c.在OnPaint()函数下else语句块里添加如下代码
CPaintDCdc(this);
CBitmapBackBMP;
BackBMP.LoadBitmap(IDB_BITMAP1);
BITMAPbm;
BackBMP.GetBitmap(&bm);
CDCImageDC;
ImageDC.CreateCompatibleDC(&dc);
CBitmap*pOldImageBMP=ImageDC.SelectObject(&BackBMP);
dc.StretchBlt(0,0,bm.bmWidth,bm.bmHeight,
&ImageDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
ImageDC.SelectObject(pOldImageBMP);
CBitmapForeBMP;
ForeBMP.LoadBitmap(IDB_BITMAP2);
ForeBMP.GetBitmap(&bm);
pOldImageBMP=ImageDC.SelectObject(&ForeBMP);
TransparentBlt(dc.GetSafeHdc(),0,0,bm.bmWidth,bm.bmHeight,
ImageDC.GetSafeHdc(),0,0,bm.bmWidth,bm.bmHeight,RGB(0xff,0xff,0xff));
ImageDC.SelectObject(pOldImageBM