MFC控件和功能实现.docx
《MFC控件和功能实现.docx》由会员分享,可在线阅读,更多相关《MFC控件和功能实现.docx(28页珍藏版)》请在冰豆网上搜索。
MFC控件和功能实现
1、表格控件的使用CListCtrl
将表格控件托到窗口后,将properies中style中的view改为report,在classwizard中的menbervariables添加对应的controll变量m_list,在OnInitDialog()中初始化表格:
//初始化Listctrl表头
m_list.SetBkColor(RGB(255,255,255));//设置背景颜色
m_list.SetTextColor(RGB(0,0,0));//设置文本颜色
m_list.SetTextBkColor(RGB(255,151,240));//设置文本背景颜色
m_list.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);//设置表格风格
m_list.InsertColumn(0,_T("序号"),LVCFMT_IMAGE|LVCFMT_LEFT);//设置列名
m_list.InsertColumn(1,_T("信源符号"));//设置列名
m_list.InsertColumn(2,_T("概率"));
m_list.SetColumnWidth(0,60);//设置列宽
m_list.SetColumnWidth(1,120);
往表格中插入数据:
for(i=0;i{m_list.InsertItem(i,"");//初始化行si.Format("%d",i+1);m_list.SetItemText(i,0,si);//插入字符str1.Format("%c",zifu[i]);m_list.SetItemText(i,1,str1);str2.Format("%.3f",weigh[i]);m_list.SetItemText(i,2,str2);}删除表格所有数据:m_list.DeleteAllItems();//删除表格中所有数据2、CString转Char数组和指针、Int等数据类型CStringcstr;Chars[100];char*p=(LPSTR)(LPCTSTR)cstr;strcpy(s,p);string转CStringCString.format(”%s”,string.c_str());char转CStringCString.format(”%s”,char*);char转stringstrings(char*);string转char*char*p=string.c_str();CString转stringstrings(CString.GetBuffer());3、消息窗口的使用MessageBox()AfxMessageBox()函数原型:intMessageBox(HWNDhWnd,LPCTSTRlpText,LPCTSTRlpCaption,UINTUType); 参数: hWnd:标识将被创建的消息框的拥有窗口。如果此参数为NULL,则消息框没有拥有窗口。及为显示内容 lpText:指向一个以NULL结尾的、含有将被显示的消息的字符串的指针。 lpCaption:指向一个以NULL结尾的、用于对话框标题的字符串的指针。 uType:指定一个决定对话框的内容和行为的位标志集。此参数可以为下列标志组中标志的组合。 指定下列标志中的一个来显示消息框中的按钮,标志的含义如下。 MB_ABORTRETRYIGNORE:消息框含有三个按钮:Abort,Retry和Ignore。 MB_OK:消息框含有一个按钮:OK。这是缺省值。 MB_OKCANCEL:消息框含有两个按钮:OK和Cancel。 MB_RETRYCANCEL:消息框含有两个按钮:Retry和Cancel。 MB_YESNO:消息框含有两个按钮:Yes和No。 MB_YESNOCANCEL:消息框含有三个按钮:Yes,No和Cancel。 指定下列标志中的一个来显示消息框中的图标:标志的含义如下。 MB_ICONEXCLAMATION: MB_ICONWARNING:一个惊叹号出现在消息框。 MB_ICONINFORMATION: MB_ICONASTERISK:一个圆圈中小写字母i组成的图标出现在消息框。 MB_ICONQUESTION:一个问题标记图标出现在消息框。 MB_ICONSTOP: MB_ICONERROR: MB_ICONHAND:一个停止消息图标出现在消息框。 指定下列标志中的一个来显不缺省的按钮:标志的含义如下。 MB_DEFBUTTON1:第一个按钮为缺省按钮。如果MB_DEFBUTTON2,MB_DEFBUTTON3,MB_DEFBUTTON4没有被指定,则MB_DEFBUTTON1为缺省值。 MB_DEFSUTTON2;第二个按钮为缺省按钮。 MB_DEFBUTTON3:第三个按钮为缺省按钮。MB_DEFBUTTON4:第四个按钮为缺省按钮。使用举例:MessageBox("字符串为空!请输入字符串!","警告",MB_ICONEXCLAMATION);AfxMessageBox("字符串为空!请输入字符串!");4、编辑框CEdit使用添加滚动条使其自动换行,选择properties中style,选上multiline、verticalscroll和AutoVscroll属性;设置编辑框字体颜色:在窗口中添加函数OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor):在其中加入代码:if(pWnd->GetDlgCtrlID()==IDC_EDIT1){pDC->SetTextColor(RGB(255,125,0));//设置字体颜色}设置编辑框和静态框为透明效果:HBRUSHCloginDlg::OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor){HBRUSHhbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor);if(nCtlColor==CTLCOLOR_STATIC)//对所有的STATIC控件的属性进行设定{pDC->SetBkMode(TRANSPARENT);return(HBRUSH)::GetStockObject(NULL_BRUSH);}if(nCtlColor==CTLCOLOR_EDIT)//对所有的STATIC控件的属性进行设定{pDC->SetBkMode(TRANSPARENT);return(HBRUSH)::GetStockObject(NULL_BRUSH);}returnhbr;}将文件内容读入到编辑框:在打开文件按钮添加代码CFileDialogdlg(true,NULL,"*.txt",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,"TextFiles(*.txt;*.doc;*.docx)|*.txt;*.doc;*.docx|AllCompressFiles(*.*)|*.*||",this);//构造文件打开对话框CStringstrPath,strText="",s;if(dlg.DoModal()==IDOK){strPath=dlg.GetPathName();//获得文件路径CStdioFilefile2;if(!file2.Open(strPath,CFile::modeRead))//打开文件return;while(true)//按行循环读取文件内容存入s{if(!file2.ReadString(s))break;strText=strText+s;}}m_edit1=strText;UpdateData(false);5、按钮的使用按钮添加图片:第一种:Button属性页里Style的Bitmap点上CBitmapBitmap;Bitmap.LoadBitmap(IDB_BITMAP1);HBITMAPhBitmap=(HBITMAP)Bitmap.Detach();CButton*pButton=(CButton*)GetDlgItem(IDCANCEL);pButton->SetBitmap(hBitmap);感觉效果不是很好。因为图片不会自动拉伸。第二种:可以采用CButtonST控件,挺好用的,比MFC的那些封装好用。第三种:把button按钮属性设置为owerdraw然后映射onDrawItem消息在ondraw函数内自己绘制就可以了voidCUi6Dlg::OnDrawItem(intnIDCtl,LPDRAWITEMSTRUCTlpDrawItemStruct){if(nIDCtl==IDC_HELLO_CFAN){//绘制按钮框架UINTuStyle=DFCS_BUTTONPUSH;//是否按下去了?if(lpDrawItemStruct->itemState&ODS_SELECTED)uStyle|=DFCS_PUSHED;CDCdc;dc.Attach(lpDrawItemStruct->hDC);dc.DrawFrameControl(&lpDrawItemStruct->rcItem,DFC_BUTTON,uStyle);//输出文字dc.SelectObject(&m_Font);dc.SetTextColor(RGB(0,0,255));dc.SetBkMode(TRANSPARENT);CStringsText;m_HelloCFan.GetWindowText(sText);dc.TextOut(lpDrawItemStruct->rcItem.left+20,lpDrawItemStruct->rcItem.top+20,sText);//是否得到焦点if(lpDrawItemStruct->itemState&ODS_FOCUS){//画虚框CRectrtFocus=lpDrawItemStruct->rcItem;rtFocus.DeflateRect(3,3);dc.DrawFocusRect(&rtFocus);}return;}CDialog::OnDrawItem(nIDCtl,lpDrawItemStruct);}第四种:1,按钮属性OnwerDrew选上,按钮ID:IDC_BUTTON12,定义private变量:CBitmapButtonm_button;3,在初始化里边m_button.LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2);//IDB_BITMAP1:平时;IDB_BITMAP2:按下m_button.SubclassDlgItem(IDC_BUTTON1,this);m_button.SizeToContent();设置按钮显示的文字代码:GetDlgItem(IDC_BUTTON2)->SetWindowText("开始编码");6、Flash控件的使用[工具(T)]--[ActiveXControlTestContainer]--[弹出对话框][File]--[RegisterControls]--[弹出对话框]找到C:WINDOWS\system32\Macromed\lash\Flash10e.ocx,[打开]弹出"MFCClassWizard"框里为FLASH的ID添加映射:选择IDC_SHOCKWAVEFLASH1、FSCommand、[AddFunction],弹出"AddMemberFunction"选[OK]在"MFCClassWizard"框里第2页"MemberVariables",为FLASH的ID添加类,弹出提示对话框选择[确定],我们定义类名字,为m_flash,基类为CShockwaveFlash"播放按钮"代码:为视图资源里的"播放"按钮消息响应函数修改代码voidCTest0407Dlg::OnOK()//对应"播放"按钮{//TODO:Addextravalidationhere//CDialog::OnOK();m_flash.LoadMovie(0,"c:\\VC\\tu\\12.swf");//播放FLASH文件,路径C:\VC\tu\12.swfm_flash.Play();}7、为VC界面加载ssk皮肤到网上下载这三个文件skinppwtl.dll,SkinPPWTL.h,SkinPPWTL.lib放到工程下,我的XX网盘下载连接(/singlepublic?fid=564282_4)在界面的.cpp中添加头文件SkinPPWTL.h,在InitInstance()中添加skinppLoadSkin("skin\\xp_corona.ssk");//初始化皮肤xp_corona.ssk,按Alt+F7,选择连接,添加SkinPPWTL.lib确认即可。8、窗口菜单的使用在资源框中选中工程,右击选择insert->menu创建菜单,右击窗口,选择properties->general->menu;为子菜单添加事件:右击子菜单选择->MFCClassWizard,弹出一个对话框,->selectaexistclass->选择创建的类如CMyDlg;在Messagemaps中选择对应子菜单的ID,在Messages选择command->addfunction->确定->editcode即可二级菜单的使用:选择一个子菜单右击选择->properties->general->Pop-up即可9、窗口添加右击菜单按照上面的方法添加一个菜单,MFCClassWizard中Messages添加WM_OnRButtonDown事件,在OnRButtonDown(UINTnFlags,CPointpoint)函数中添加代码:voidCMyDlg::OnRButtonDown(UINTnFlags,CPointpoint){CMenumenu;menu.LoadMenu(IDR_MENU2);//载入刚才创建的菜单CMenu*pContextMenu=menu.GetSubMenu(0);CPointpoint1;GetCursorPos(&point1);//获得鼠标焦点pContextMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,this);//AfxGetMainWnd()CDialog::OnRButtonDblClk(nFlags,point);}10、为静态文本添加动态显示时间在窗口拖入一个静态框,ID改为IDC_time,在OnInitDialog()中添加SetTimer(1,1000,NULL);在MFCClassWizard中Messages添加WM_TIMER事件,在OnTimer(UINTnIDEvent)函数中添加代码:voidCMyDlg::OnTimer(UINTnIDEvent){CStringstr;CTimet;t=CTime::GetCurrentTime();str.Format("%02d-%02d-%02d%02d:%02d:%02d",t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());GetDlgItem(IDC_time)->SetWindowText(str);CDialog::OnTimer(nIDEvent);}11、状态栏的使用1).添加字符串在工作区中选择ResourceView标签,转到资源编辑窗口,双击“StringTable”→“StringTable”项条目打开打开串表资源的编辑器。选择最下面的空白项并双击,或选择某个串后按“Insert”键,将弹出“StringProperties”对话框。在“ID”框中输入串标识符IDS_limin和IDS_TIME和值,在“Caption”框内输入标题字符的内容,串值为系统自动设定。为Dlg类添加成员变量CStatusBarm_Bar;在Dlg类中添加staticUINTindicators[]={IDS_limin,IDS_TIME};2).在Dlg类OnInitDialg中添加如下代码/*①创建状态栏*/m_StatusBar.Create(this);//默认ID//设置状态栏m_bar.Create(this);//在当前窗口创建状态栏m_bar.SetIndicators(indicators,2);//将状态栏分成两列m_bar.SetPaneInfo(0,IDS_limin,SBPS_NORMAL,rect.Width()-150);m_bar.SetPaneInfo(1,IDS_TIME,SBPS_STRETCH,0); /*⑤ 显示状态栏*/RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);//显示状态栏/*⑥状态栏随对话框窗口大小而变化*///关于此方法请查阅"界面技巧"之"控件大小随窗口而调整"m_Bar.SetOwner(this);m_Bar.SetResize(AFX_IDW_STATUS_BAR,PK_BOTTOM_LEFT,PK_BOTTOM_RIGHT);//AFX_IDW_STATUS_BAR为状态栏默认的ID【思路总结】创建CStatusBar类变量;创建状态栏create;添加面板setIndicators;设置面板宽度SetPaneInfo;设置面板文本SetPaneText;显示状态栏RepositionBars;状态栏显示时间:为CMainFrame类的OnTimer()函数添加如下代码:语句“tmCurr=CTime::GetCurrentTime();”用于获取系统当前时间,再通过语句“strTime=tmCurr.Format('%H:%M:%S');”将时间格式化后赋给字符串strTime。最后通过状态栏类CStatusBar成员函数SetPaneText()将字符串strTime显示到ID_INDICATOR_TIME所指示的窗格中。m_bar.SetPaneText(1,strTime);12、改变VC对话框的颜色实现①新建一个基于Dialog的MFCAppWizard应用程序ExampleDlg。----②在CExampleDlgApp::InitInstance()中添加如下代码:BOOLCExampleDlgApp::InitInstance(){…CExampleDlgDlgdlg;m_pMainWnd=&dlg;//先于DoModal()调用,将对话框设置为蓝色背景、红色文本SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));intnResponse=dlg.DoModal();…}----编译并运行,此时对话框的背景色和文本色已发生了改变。值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。----方法二:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准):voidCExampleDlgDlg::OnPaint(){if(IsIconic())…else{CRectrect;CPaintDCdc(this);GetClientRect(rect);dc.FillSolidRect(rect,RGB(0,255,0));//设置为绿色背景CDialog::OnPaint();}----方法三:重载OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):----①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量:classCExampleDlgDlg:publicCDialog{...protected:CBrushm_brush;...};----②在OnInitDialog()函数中添加如下代码:BOOLCExampleDlgDlg::OnInitDialog(){...//TODO:Addextrainitializationherem_brush.CreateSolidBrush(RGB(0,255,0));//生成一绿色刷子...}----③利用ClassWizard重载OnCtlColor(…),即WM_CTLCOLOR消息:HBRUSHCExampleDlgDlg::OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor){/***这里不必编写任何代码!**下行代码要注释掉**HBRUSHhbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor);*/returnm_brush;//返加绿色刷子}----方法四:还是重载OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):----步骤①、②同上方法三中的步骤①、②。----步骤③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLO
{
m_list.InsertItem(i,"");//初始化行
si.Format("%d",i+1);
m_list.SetItemText(i,0,si);//插入字符
str1.Format("%c",zifu[i]);
m_list.SetItemText(i,1,str1);
str2.Format("%.3f",weigh[i]);
m_list.SetItemText(i,2,str2);
}
删除表格所有数据:
m_list.DeleteAllItems();//删除表格中所有数据
2、CString转Char数组和指针、Int等数据类型
CStringcstr;
Chars[100];
char*p=(LPSTR)(LPCTSTR)cstr;
strcpy(s,p);
string转CString
CString.format(”%s”,string.c_str());
char转CString
CString.format(”%s”,char*);
char转string
strings(char*);
string转char*
char*p=string.c_str();
CString转string
strings(CString.GetBuffer());
3、消息窗口的使用MessageBox()AfxMessageBox()
函数原型:
intMessageBox(HWNDhWnd,LPCTSTRlpText,LPCTSTRlpCaption,UINTUType);
参数:
hWnd:
标识将被创建的消息框的拥有窗口。
如果此参数为NULL,则消息框没有拥有窗口。
及为显示内容
lpText:
指向一个以NULL结尾的、含有将被显示的消息的字符串的指针。
lpCaption:
指向一个以NULL结尾的、用于对话框标题的字符串的指针。
uType:
指定一个决定对话框的内容和行为的位标志集。
此参数可以为下列标志组中标志的组合。
指定下列标志中的一个来显示消息框中的按钮,标志的含义如下。
MB_ABORTRETRYIGNORE:
消息框含有三个按钮:
Abort,Retry和Ignore。
MB_OK:
消息框含有一个按钮:
OK。
这是缺省值。
MB_OKCANCEL:
消息框含有两个按钮:
OK和Cancel。
MB_RETRYCANCEL:
Retry和Cancel。
MB_YESNO:
Yes和No。
MB_YESNOCANCEL:
Yes,No和Cancel。
指定下列标志中的一个来显示消息框中的图标:
标志的含义如下。
MB_ICONEXCLAMATION:
MB_ICONWARNING:
一个惊叹号出现在消息框。
MB_ICONINFORMATION:
MB_ICONASTERISK:
一个圆圈中小写字母i组成的图标出现在消息框。
MB_ICONQUESTION:
一个问题标记图标出现在消息框。
MB_ICONSTOP:
MB_ICONERROR:
MB_ICONHAND:
一个停止消息图标出现在消息框。
指定下列标志中的一个来显不缺省的按钮:
MB_DEFBUTTON1:
第一个按钮为缺省按钮。
如果MB_DEFBUTTON2,MB_DEFBUTTON3,MB_DEFBUTTON4没有被指定,则MB_DEFBUTTON1为缺省值。
MB_DEFSUTTON2;第二个按钮为缺省按钮。
MB_DEFBUTTON3:
第三个按钮为缺省按钮。
MB_DEFBUTTON4:
第四个按钮为缺省按钮。
使用举例:
MessageBox("字符串为空!
请输入字符串!
","警告",MB_ICONEXCLAMATION);
AfxMessageBox("字符串为空!
");
4、编辑框CEdit使用
添加滚动条使其自动换行,选择properties中style,选上multiline、verticalscroll和AutoVscroll属性;
设置编辑框字体颜色:
在窗口中添加函数OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor):
在其中加入代码:
if(pWnd->GetDlgCtrlID()==IDC_EDIT1)
pDC->SetTextColor(RGB(255,125,0));//设置字体颜色
设置编辑框和静态框为透明效果:
HBRUSHCloginDlg:
:
OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor)
HBRUSHhbr=CDialog:
OnCtlColor(pDC,pWnd,nCtlColor);
if(nCtlColor==CTLCOLOR_STATIC)
//对所有的STATIC控件的属性进行设定
pDC->SetBkMode(TRANSPARENT);
return(HBRUSH):
GetStockObject(NULL_BRUSH);
if(nCtlColor==CTLCOLOR_EDIT)
returnhbr;
将文件内容读入到编辑框:
在打开文件按钮添加代码
CFileDialogdlg(true,NULL,"*.txt",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,
"TextFiles(*.txt;*.doc;*.docx)|*.txt;*.doc;*.docx|AllCompressFiles(*.*)|*.*||",this);//构造文件打开对话框
CStringstrPath,strText="",s;
if(dlg.DoModal()==IDOK)
strPath=dlg.GetPathName();//获得文件路径
CStdioFilefile2;
if(!
file2.Open(strPath,CFile:
modeRead))//打开文件
return;
while(true)//按行循环读取文件内容存入s
file2.ReadString(s))
break;
strText=strText+s;
m_edit1=strText;
UpdateData(false);
5、按钮的使用
按钮添加图片:
第一种:
Button属性页里Style的Bitmap点上
CBitmapBitmap;
Bitmap.LoadBitmap(IDB_BITMAP1);
HBITMAPhBitmap=(HBITMAP)Bitmap.Detach();
CButton*pButton=(CButton*)GetDlgItem(IDCANCEL);
pButton->SetBitmap(hBitmap);
感觉效果不是很好。
因为图片不会自动拉伸。
第二种:
可以采用CButtonST控件,挺好用的,比MFC的那些封装好用。
第三种:
把button按钮属性设置为owerdraw
然后映射onDrawItem消息
在ondraw函数内自己绘制就可以了
voidCUi6Dlg:
OnDrawItem(intnIDCtl,LPDRAWITEMSTRUCTlpDrawItemStruct)
if(nIDCtl==IDC_HELLO_CFAN)
//绘制按钮框架
UINTuStyle=DFCS_BUTTONPUSH;
//是否按下去了?
if(lpDrawItemStruct->itemState&ODS_SELECTED)
uStyle|=DFCS_PUSHED;
CDCdc;
dc.Attach(lpDrawItemStruct->hDC);
dc.DrawFrameControl(&lpDrawItemStruct->rcItem,DFC_BUTTON,uStyle);
//输出文字
dc.SelectObject(&m_Font);
dc.SetTextColor(RGB(0,0,255));
dc.SetBkMode(TRANSPARENT);
CStringsText;
m_HelloCFan.GetWindowText(sText);
dc.TextOut(lpDrawItemStruct->rcItem.left+20,lpDrawItemStruct->rcItem.top+20,sText);
//是否得到焦点
if(lpDrawItemStruct->itemState&ODS_FOCUS)
//画虚框
CRectrtFocus=lpDrawItemStruct->rcItem;
rtFocus.DeflateRect(3,3);
dc.DrawFocusRect(&rtFocus);
CDialog:
OnDrawItem(nIDCtl,lpDrawItemStruct);
第四种:
1,按钮属性OnwerDrew选上,按钮ID:
IDC_BUTTON1
2,定义private变量:
CBitmapButtonm_button;
3,在初始化里边
m_button.LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2);//IDB_BITMAP1:
平时;IDB_BITMAP2:
按下
m_button.SubclassDlgItem(IDC_BUTTON1,this);
m_button.SizeToContent();
设置按钮显示的文字代码:
GetDlgItem(IDC_BUTTON2)->SetWindowText("开始编码");
6、Flash控件的使用
[工具(T)]--[ActiveXControlTestContainer]--[弹出对话框]
[File]--[RegisterControls]--[弹出对话框]
找到C:
WINDOWS\system32\Macromed\lash\Flash10e.ocx,[打开]
弹出"MFCClassWizard"框里为FLASH的ID添加映射:
选择IDC_SHOCKWAVEFLASH1、FSCommand、[AddFunction],弹出"AddMemberFunction"选[OK]
在"MFCClassWizard"框里第2页"MemberVariables",为FLASH的ID添加类,弹出提示对话框选择[确定],我们定义类名字,为m_flash,基类为CShockwaveFlash
"播放按钮"代码:
为视图资源里的"播放"按钮消息响应函数修改代码
voidCTest0407Dlg:
OnOK()//对应"播放"按钮
//TODO:
Addextravalidationhere
//CDialog:
OnOK();
m_flash.LoadMovie(0,"c:
\\VC\\tu\\12.swf");//播放FLASH文件,路径C:
\VC\tu\12.swf
m_flash.Play();
7、为VC界面加载ssk皮肤
到网上下载这三个文件skinppwtl.dll,SkinPPWTL.h,SkinPPWTL.lib放到工程下,我的XX网盘下载连接(/singlepublic?
fid=564282_4)
在界面的.cpp中添加头文件SkinPPWTL.h,在InitInstance()中添加skinppLoadSkin("skin\\xp_corona.ssk");//初始化皮肤xp_corona.ssk,按Alt+F7,选择连接,添加SkinPPWTL.lib确认即可。
8、窗口菜单的使用
在资源框中选中工程,右击选择insert->menu创建菜单,右击窗口,选择properties->general->menu;
为子菜单添加事件:
右击子菜单选择->MFCClassWizard,弹出一个对话框,->selectaexistclass->选择创建的类如CMyDlg;在Messagemaps中选择对应子菜单的ID,在Messages选择command->addfunction->确定->editcode即可
二级菜单的使用:
选择一个子菜单右击选择->properties->general->Pop-up即可
9、窗口添加右击菜单
按照上面的方法添加一个菜单,MFCClassWizard中Messages添加WM_OnRButtonDown事件,在OnRButtonDown(UINTnFlags,CPointpoint)函数中添加代码:
voidCMyDlg:
OnRButtonDown(UINTnFlags,CPointpoint)
CMenumenu;
menu.LoadMenu(IDR_MENU2);//载入刚才创建的菜单
CMenu*pContextMenu=menu.GetSubMenu(0);
CPointpoint1;
GetCursorPos(&point1);//获得鼠标焦点
pContextMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,this);//AfxGetMainWnd()
OnRButtonDblClk(nFlags,point);
10、为静态文本添加动态显示时间
在窗口拖入一个静态框,ID改为IDC_time,在OnInitDialog()中添加SetTimer(1,1000,NULL);在MFCClassWizard中Messages添加WM_TIMER事件,在OnTimer(UINTnIDEvent)函数中添加代码:
OnTimer(UINTnIDEvent)
CStringstr;
CTimet;
t=CTime:
GetCurrentTime();
str.Format("%02d-%02d-%02d%02d:
%02d:
%02d",t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());
GetDlgItem(IDC_time)->SetWindowText(str);
OnTimer(nIDEvent);
11、状态栏的使用
1).添加字符串
在工作区中选择ResourceView标签,转到资源编辑窗口,双击“StringTable”→“StringTable”项条目打开打开串表资源的编辑器。
选择最下面的空白项并双击,或选择某个串后按“Insert”键,将弹出“StringProperties”对话框。
在“ID”框中输入串标识符IDS_limin和IDS_TIME和值,在“Caption”框内输入标题字符的内容,串值为系统自动设定。
为Dlg类添加成员变量CStatusBarm_Bar;
在Dlg类中添加staticUINTindicators[]={IDS_limin,IDS_TIME};
2).在Dlg类OnInitDialg中添加如下代码
/*①创建状态栏*/
m_StatusBar.Create(this);//默认ID
//设置状态栏
m_bar.Create(this);//在当前窗口创建状态栏
m_bar.SetIndicators(indicators,2);//将状态栏分成两列
m_bar.SetPaneInfo(0,IDS_limin,SBPS_NORMAL,rect.Width()-150);
m_bar.SetPaneInfo(1,IDS_TIME,SBPS_STRETCH,0);
/*⑤ 显示状态栏*/
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);//显示状态栏
/*⑥状态栏随对话框窗口大小而变化*/
//关于此方法请查阅"界面技巧"之"控件大小随窗口而调整"
m_Bar.SetOwner(this);
m_Bar.SetResize(AFX_IDW_STATUS_BAR,PK_BOTTOM_LEFT,PK_BOTTOM_RIGHT);//AFX_IDW_STATUS_BAR为状态栏默认的ID【思路总结】
创建CStatusBar类变量;创建状态栏create;添加面板setIndicators;设置面板宽度SetPaneInfo;设置面板文本SetPaneText;显示状态栏RepositionBars;
状态栏显示时间:
为CMainFrame类的OnTimer()函数添加如下代码:
语句“tmCurr=CTime:
GetCurrentTime();”用于获取系统当前时间,再通过语句“strTime=tmCurr.Format('%H:
%M:
%S');”将时间格式化后赋给字符串strTime。
最后通过状态栏类CStatusBar成员函数SetPaneText()将字符串strTime显示到ID_INDICATOR_TIME所指示的窗格中。
m_bar.SetPaneText(1,strTime);
12、改变VC对话框的颜色实现
①新建一个基于Dialog的MFCAppWizard应用程序ExampleDlg。
----②在CExampleDlgApp:
InitInstance()中添加如下代码:
BOOLCExampleDlgApp:
InitInstance()
…
CExampleDlgDlgdlg;
m_pMainWnd=&dlg;
//先于DoModal()调用,将对话框设置为蓝色背景、红色文本
SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));
intnResponse=dlg.DoModal();
----编译并运行,此时对话框的背景色和文本色已发生了改变。
值得注意的
是:
在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变
应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。
----方法二:
重载OnPaint(),即WM_PAINT消息。
有关代码如下(以上例工程为准):
voidCExampleDlgDlg:
OnPaint()
if(IsIconic())
else
CRectrect;
CPaintDCdc(this);
GetClientRect(rect);
dc.FillSolidRect(rect,RGB(0,255,0));//设置为绿色背景
OnPaint();
----方法三:
重载OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor),
即WM_CTLCOLOR消息。
具体步骤如下(以上例工程为准):
----①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量:
classCExampleDlgDlg:
publicCDialog
...
protected:
CBrushm_brush;
};
----②在OnInitDialog()函数中添加如下代码:
BOOLCExampleDlgDlg:
OnInitDialog()
Addextrainitializationhere
m_brush.CreateSolidBrush(RGB(0,255,0));//生成一绿色刷子
----③利用ClassWizard重载OnCtlColor(…),即WM_CTLCOLOR消息:
HBRUSHCExampleDlgDlg:
OnCtlColor
(CDC*pDC,CWnd*pWnd,UINTnCtlColor)
/*
**这里不必编写任何代码!
**下行代码要注释掉
**HBRUSHhbr=CDialog:
*/
returnm_brush;//返加绿色刷子
----方法四:
还是重载OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor),
----步骤①、②同上方法三中的步骤①、②。
----步骤③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLO
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1