MFC控件和功能实现.docx

上传人:b****5 文档编号:5171403 上传时间:2022-12-13 格式:DOCX 页数:28 大小:35.28KB
下载 相关 举报
MFC控件和功能实现.docx_第1页
第1页 / 共28页
MFC控件和功能实现.docx_第2页
第2页 / 共28页
MFC控件和功能实现.docx_第3页
第3页 / 共28页
MFC控件和功能实现.docx_第4页
第4页 / 共28页
MFC控件和功能实现.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

MFC控件和功能实现.docx

《MFC控件和功能实现.docx》由会员分享,可在线阅读,更多相关《MFC控件和功能实现.docx(28页珍藏版)》请在冰豆网上搜索。

MFC控件和功能实现.docx

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转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)

//对所有的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_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()

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:

Addextrainitializationhere

m_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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1