CreatePointFont(120,_T("华文行楷"));GetDlgItem(IDC_XX)" />
文档库 最新最全的文档下载
当前位置:文档库 › MFC对话框程序中的各组件常用方法

MFC对话框程序中的各组件常用方法

MFC对话框程序中的各组件常用方法
MFC对话框程序中的各组件常用方法

MFC对话框程序中的各组件常用方法:

Static Text:

将ID号改成唯一的一个,如:IDC_XX,然后进一次类向导点确定产生这个ID,之后更改Caption属性:

GetDlgItem(IDC_XX)->SetWindowText(L"dsgdhfgdffd");

设置字体:

CFont *pFont = new CFont;

pFont->CreatePointFont(120,_T("华文行楷"));

GetDlgItem(IDC_XX)->SetFont(pFont);

Edit Control:

设置文本:

SetDlgItemText(IDC_XX,L"iuewurebfdjf");

获取所有输入:

建立类向导创建一个成员变量(假设是shuru1,shuru2……)类型选value,变量类型任选。

UpdateData(true);

GetDlgItem(IDC_XX)->SetWindowText(shuru1);

第一句更新所有建立了变量的对话框组件,获取输入的值。第二句将前面的IDC_XX的静态文本内容改为shuru1输入的内容。

若类型选用control:

1.设置只读属性:

shuru1.SetReadOnly(true);

2.判断edit中光标状态并得到选中内容(richedit同样适用)

int nStart, nEnd;

CString strTemp;

shuru1.GetSel(nStart, nEnd);

if(nStart == nEnd)

{

strTemp.Format(_T(" 光标在%d" ), nStart);

AfxMessageBox(strTemp);

}

else

{

//得到edit选中的内容

shuru1.GetWindowText(strTemp);

strTemp = strTemp.Mid(nStart,nEnd-nStart);

AfxMessageBox(strTemp);

}

其中nStart和nEnd分别表示光标的起始和终止位置,从0开始。strTemp.Format 方法用于格式化字符串。AfxMessageBox(strTemp)显示一个提示对话框,其内容是字符串strTemp。

strTemp = strTemp.Mid(nStart,nEnd-nStart)返回一个被截取的字符串,从nStart开始,长度为nEnd-nStart。如果nStart == nEnd说明没有选择文本。

注:SetSel(0,-1)表示全选;SetSel(-1,i)表示删除所选。

3.在edit的末尾添加字段:

CString str;

shuru1.SetSel(-1, -1);

shuru1.ReplaceSel(str);

4.随输入自动滚动到最后一行(richedit同样适用)

shuru1.PostMessage(WM_VSCROLL, SB_BOTTOM, 0);

注:作密码使用,设置密码掩码字符用SetPasswordChar('*')方法。

5.如何限制edit输入指定字符

创建一个CEdit的子类,自动化,并创建子类的WM_CHAR类型的消息:void CyxEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

if ( (nChar>= '0'&&nChar<= '9') ||

(nChar>= 'a'&&nChar<= 'f') ||

(nChar>= 'A'&&nChar<= 'F') ||

nChar == VK_BACK ||

nChar == VK_DELETE) //msdn的virtual key

{

CEdit::OnChar(nChar, nRepCnt, nFlags);

}

}

如果在对话框程序中不能正常接收消息,则还需要重载虚函数PreTranslateMessage:

BOOLCMFCApplication3Dlg::PreTranslateMessage(MSG* pMsg)

{

// TODO: 在此添加专用代码和/或调用基类

SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);

return CDialogEx::PreTranslateMessage(pMsg);//或return 0;

}

这样才能正常接收VM_CHAR消息。

6.如何使用richedit

添加AfxInitRichEdit();

CxxxApp::InitInstance()

AfxInitRichEdit2();

.............

注意:如果不添加该方法,可能会造成对话框无法生成或启动,程序闪退等现象。

7.改变richedit指定区域的颜色及字体

CHARFORMAT cf;

ZeroMemory(&cf, sizeof(CHARFORMAT));

cf.cbSize = sizeof(CHARFORMAT);

cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |

CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;

cf.dwEffects = 0;

cf.yHeight = 12*12; //文字高度

cf.crTextColor = RGB(200, 100, 255); //文字颜色

*cf.szFaceName = *_T(" 隶书" ); //设置字体待定

shuru2.SetSel(1, 5); //设置处理区域

shuru2.SetSelectionCharFormat(cf);

8.设置行间距(只适用于richedit2.0)

PARAFORMAT2 pf2;

pf2.cbSize = sizeof(PARAFORMAT2);

pf2.dwMask = PFM_LINESPACING | PFM_SPACEAFTER;

pf2.dyLineSpacing = 200;

pf2.bLineSpacingRule = 4;

shuru2.SetParaFormat(pf2);

ComboBox Contorl:

1.在编辑状态下点那个控件的向下的三角形,就出冒出来一个可以调高度的东东。将高度调高,否则在执行时会不能显示下拉选项。

2.为combobox添加选项,在编辑状态下选combobox控件的属性,选Data标签,在编辑框中添加选项,选项间用;分割。

https://www.wendangku.net/doc/0a5471840.html,boBox.SetCurSel(0)用来设置下拉菜单初始值。

4.常用方法有:

xuanze1.ResetContent();//清除所有内容

xuanze1.AddString(L"fdfjkfdj");//添加一项内容

xuanze1.GetCurSel();//获取选择的行数

xuanze1.SetCurSel(1);//设置所选行

xuanze1.GetWindowTextW(strTemp);//获取文本

xuanze1.GetCount();//获取总行数

xuanze1.DeleteString(1);//删除某行

xuanze1.InsertString(1,L"dskjjfjfkds");//将行插入到指定位置

Radio Button:

1.使用多组:

在对话框编辑界面按下Ctrl+D,将单选框按想要的顺序点击,然后把每一组的第一个单选框的Group属性设为true。

2.获取选择状态:

每组的第一个单选框ID可以设置一个变量。选择int型,然后给每个单选框都设置一个BN_CLICKED事件,在其中改变这组单选框的变量:

void CMFCApplication3Dlg::OnClickedRadio1()

{

danxuan1=1;

}

void CMFCApplication3Dlg::OnBnClickedRadio2()

{

danxuan1=2;

}

void CMFCApplication3Dlg::OnBnClickedRadio3()

{

danxuan1=3;

}

3.快速获取选择的位置(特别是一组中有很多单选框的时候):

danxuan2=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3);

该函数返回从单选框IDC_RADIO1到IDC_RADIO3中被选上的ID号,使用时须确保他们在一个组里。注意这里返回的是ID号,即假如IDC_RADIO3所代表的那个单选框被选上了,那么返回的是数字(具体多少看宏定义),所以检查的时候也要判断是否和IDC_RADIO3相等。

Check Box:

关联一个BOOL类型的变量……

MFC Edit Browse:

获取文件路径:

GetDlgItemTextW(IDC_MFCEDITBROWSE1,strTemp);

MFC Date Time Picker:

1.设置时间控件变量shijian,然后创建一个CTime变量存储时间,并将其转换为字符串。

CTime time;

shijian.GetTime(time);

CString strTime;

strTime=time.Format("%Y-%m-%d"); //获取到的为日期如:2010-03-05 strTime=time.Format("%H:%M:%S"); //获取到的为时间如:16:27:33 2.获取当前时间并将其转换为字符串:

CDateTimeCtrl m_DateItmeCtrl_Time;

m_DateItmeCtrl_Time.SetFormat(_T("yyyy-MM-dd HH:mm:ss"));

CTime TimeTemp=TimeTemp.GetCurrentTime();

m_DateItmeCtrl_Time.SetTime(&TimeTemp);

CString strTime;

COleDateTime dtTime;

strTime =dtTime.Format(_T("%Y-%m-%d %H:%M:%S"));

3.将CString转换为COleDateTime类型:

CString strTime =_T("2009-08-11 11:22:33");

COleVariant VariantTime;

VariantTime = strTime;

VariantTime.ChangeType(VT_DATE);

COleDateTime DataTime = VariantTime;

shijian.SetTime(DataTime);

4.注意SetTime方法的参数须为指针。设置控件时间为当前时间:

shijian.SetTime(&CTime::GetCurrentTime());

注:如果该控件的格式是日期,你依然可以通过该控件获取时间,得到的将是当前的时间和该控件设置的日期。(格式为时间时同理。)

Slider Control:

1.常用方法:

huakuai.SetRange(0,100);//设置范围。另有SetRangeMin和SetRangeMax可分别设置,此项最好在初始化时设置

huakuai.SetLineSize(20);//按下键盘的上下键或左右键滑动的间隔

huakuai.SetPageSize(3);//鼠标点击滑块两侧滑动的间隔

huakuai.SetPos(20);//设置滑块位置

huakuai.SetTicFreq(10);//设置刻度频度(仅仅是刻度的频度,不影响最小刻度)。另外,SetTic函数可以在指定的位置设置刻度,而ClearTic函数则清除所有的刻度

2.添加事件:

滑块可以用父窗体中的WM_HSCROLL消息(垂直的同理):

void CMFCApplication3Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

int m=huakuai.GetPos();//取得当前位置值,储存在变量m中

CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);

}

Progress Control:

1.常用方法:

jindu.GetPos(); //获取进度条的当前位置

jindu.OffsetPos(10); //用指定的增量推进进度条控件的当前位置,重绘进度条反映新位置

jindu.SetBkColor(COLORREF clrNew); //设定进度条的背景颜色

jindu.SetPos(200); //设定进度条控件的当前位置,重绘进度条反映新位置

jindu.SetRange(0,1000); //设定进度条控件的范围的下限和上限(short型参数)jindu.SetRange32(0,100000); //设定进度条控件的范围的下限和上限(int型参数)

jindu.SetStep(5); //指定进度条控件的步进增量

jindu.StepIt(); //通过步进增量,推进进度条控件的当前位置,重绘进度条反映新位置

最好在初始化的时候就指定进度条的上下限、初始位置等参数;

2.定时器:

在程序中使用:SetTimer(1,500,NULL);设置定时器。三个参数分别表示定时器号,时间间隔(ms),其他。然后,在消息中添加WM_TIMER,在其中写上:

void CMFCApplication3Dlg::OnTimer(UINT_PTR nIDEvent)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

if(nIDEvent == 1)

{

jindu.StepIt();

}

CDialogEx::OnTimer(nIDEvent);

}

则每隔0.5秒将以前面指定的步长推进进度条。

注:使用KillTimer(m);方法可以删除定时器号为m的定时器。

SetStep方法一次走2倍的数值!

Spin Control:

1.常用属性:

设置属性:

Auto Buddy(自动取关联控件为TAB顺序前一个)

Set Buddy Interger(使控件设置关联控件数值,这个值可以是十进制或十六进制) Wrap(数值超过范围时循环)

Arrow keys(当按下向上和向下方向键时,控件可以增加或减小)

Alignment控件在伙伴窗口的位置安排:Unattached(不相干)、Right(右边,同UDS_ALIGNRIGHT)、Left(左边, 同UDS_ALlGNLEFT)。

2.常用方法:

dianji.SetRange(0,100);//设置范围

dianji.SetBuddy(&shuru1);//设置伙伴窗口(设置完了之后会根据Alignment属性自动调整spin控件的位置)

dianji.SetBase(10);//设置基数(十进制还是十六进制)

dianji.SetPos(20);//设置当前位置

其它的方法滑块、进度条类似。

3.相应方法:

添加该控件的UDN_DELTAPOS消息,并在处理函数中添加:

void CMFCApplication3Dlg::OnDeltaposSpin2(NMHDR *pNMHDR, LRESULT

*pResult)

{

LPNMUPDOWN pNMUpDown =

reinterpret_cast(pNMHDR);

// TODO: 在此添加控件通知处理程序代码

CString strValue ;

shuru1.GetWindowTextW(strValue); //得到编辑框中的内容

if(pNMUpDown->iDelta > 0) //如果点击的是Spin中的往上按钮

{

if(!strValue.IsEmpty())

{

strValue.SetAt(0 , strValue[0] + 1); //编辑框首字母加1

shuru1.SetWindowTextW(strValue); //保存修改

}

}

elseif(pNMUpDown->iDelta < 0) //如果点击的是Spin中往下按钮

{

if(!strValue.IsEmpty())

{

strValue.SetAt(0 , strValue[0] - 1); //编辑框首字母减1

shuru1.SetWindowTextW(strValue); //保存修改

}

}

*pResult = 0;

}

用于实现旋转按钮控件的操作。注意,这里是直接在字符串上加减的,如需处理数字,还需转换或使用其它方法。

附:转换方法(须包含文件stdlib.h):

字符串转数字:atof,atoi,atol等,形式:double atof(constchar *nptr);

Strtod,strtoi,strtol等,形式:double strtoi(constchar *nptr,char **endptr);

后面的参数如果不为NULL,将把转换终止之后的字符串通过该指针传回。

如果是unicode字符或TCHAR类型的字符串,则将a换成_w或_t即可。

数字转字符串:将上述函数反过来即可。如果是unicode字符或TCHAR类型的字符串,则在方法前加_并将a换成w或t即可。

注意:浮点数转ASCII字符串使用gcvt方法:

char *gcvt(double number,size_t ndigits,char *buf);

其中:第二个参数表示要转换的位数,转换后的字符串放在第三个参数所指向的空间。返回的是转换的结果,同buf指针。

Picture Control:

1.导入位图:

在资源视图中添加资源,选择一个bmp格式的文件,该文件会自动进入Bitmap类型中,并自动分配一个ID号。在对话框中添加一个Picture控件,类型选Bitmap,在image属性中就会出现刚才添加的位图的ID号,选择即可。(Icon图标同理,也用bmp类型的文件)。

其它常用方法:

设置控件焦点用XXX.SetFocus();方法。获取焦点控件用GetFocus();方法。

wenjian.ShowWindow(SW_HIDE);//隐藏控件

wenjian.ShowWindow(SW_SHOW);//显示控件

GetDlgItem(IDC_BUTTON2)->EnableWindow(true);//允许控件

GetDlgItem(IDC_BUTTON1)->EnableWindow(false);//禁止控件

wenjian.SetWindowPos(NULL,30,200,0,0,SWP_NOSIZE);//移动或改变控件大小

第一个参数一般为NULL,后两个参数分别表示控件的x,y位置,再后两个参数表示控件的宽度和高度,最后一个参数有三种:SWP_NOZORDER忽略第一个参数;SWP_NOMOVE忽略x,y,只改变宽度和高度;SWP_NOSIZE忽略大小,仅改变位置。

Cstring转char *型字符串:

CString str;

char ipdizhi[20];

WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,str.GetBuffer(),-1,i

pdizhi,strlen(ipdizhi),NULL,NULL);

Char * 型字符串转Cstring:

char recvBuf[50];

str=recvBuf;

添加非模态对话框:

在资源视图中的Dialog右击,选择插入Dialog。打开新对话框,在上面右击,选择添加类。写好类名,基类选择Cdialog。这里以类名为Dlg为例。在要弹出该对话框的对话框的.h文件中包含该对话框文件,在类前面写上类声明,并在类的成员中添加变量并在构造函数中将其初始化成NULL:

#include"Dlg.h"

// CGuoZhanDlg 对话框

class Dlg;

class CGuoZhanDlg : public CDialogEx

{

……………………

public:

Dlg * youxichuangkou;

};

之后,添加按钮的消息映射函数:

void CGuoZhanDlg::OnBnClickedButton1()

{

// TODO: 在此添加控件通知处理程序代码

if((youxichuangkou!=NULL)&&::IsWindow(youxichuangkou->m_hWnd))

{

youxichuangkou->ShowWindow(SW_SHOW);

}

else

{

youxichuangkou = new youxi();

}

if(!::IsWindow(youxichuangkou->m_hWnd))

{

youxichuangkou->Create(IDD_DIALOG1,this);

youxichuangkou->ShowWindow(SW_SHOW);

}

}

最后再类视图中,右击新添加的类,选择类向导,然后选择虚函数,在其中找到PostNcDestroy一项,添加该虚函数:

void Dlg::PostNcDestroy()

{

// TODO: 在此添加专用代码和/或调用基类deletethis;

//CDialog::PostNcDestroy();

}

MFC知识点(自己整理的,只供参考)

知识点:不是很全面,只供参考 第一章 Windows应用程序使用的界面是由各种图形元素组成的图形界面(GUI)。 Windows提供了大量预定义的用C语言编写的函数,这些函数就叫做API(Application Programming Interface)函数。 在Windows应用程序中,存在着许多与DOS应用程序不同的复杂对象,例如窗口、按钮、滚动条等等。Windows把为这种复杂对象所定义的标识叫做句柄。 常用的句柄类型:HWND 窗口句柄,HDC 图形设备环境句柄,HINSTANCE 当前程序应用实例句柄,HBITMAP 位图句柄,HICON 图标句柄,HCURSOR 光标句柄,HBRUSH 画刷句柄,HPEN 画笔句柄,HFONT 字体句柄,HMENU 菜单句柄,HFILE 文件句柄 事件的描述是一个消息 消息的结构: typedef struct tagMSG { HWND hwnd; //产生消息的窗口句柄 UINT message;//消息的标识码 WPARAM wParam;//消息的附加信息1 LPARAM lParam;//消息的附加信息2 DWORD time; //消息进入消息队列的时刻 POINT pt; //表示发送该消息时鼠标的位置 }MSG; 消息循环: while(GetMessage(&msg,NULL,NULL,NULL))//系统处理了消息后返回 { TranslateMessage(&msg);//把键盘消息翻译成字符消息 DispatchMessage(&msg);//把消息派发给Windows系统 创建窗口的三个步骤: 注册窗口类: RegisterClass(&wc); 创建窗口: hwnd=CreateWindow( lpszClassName, "Windows", WS_OVERLAPPEDWINDOW, 120,50,800,600, NULL, NULL, hInstance, NULL); 显示窗口: ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd); 大题:用函数封装Windows程序(P16) 第二章

VC 中自己创建对话框方法

VC中自己创建对话框的方法 这里讲在VC中不需要打开MFC工程,通过代码直接创建一个对话框,我看这个对话框比MFC的漂亮多了,而且要写会代码不需要研究MFC就直接开发新的工程. 先打开VC++ 6.0 版本, 第一步:创建一个工程名为:Main Dialog 的Win32 Application。创建过程如下: 打开File菜单中New,选自Win32 Application,工程名为:Main Dialog,点击OK,再选自A simple Win32 application。点击Finish,再点击OK.(见图1) 第二步:创建资源脚本。再打开File菜单中New,选自File选项的Resource Script(就是资源脚本),文件名为Dialog,点击OK。

(见图2) 第三步:插入对话框。刚才建立的脚本Dialog显示为Dialog.rc,就在Dialog.rc上面点击鼠标右键Insert(插入)Resource中选自插入Dialog(对话框),点击New(新建),这样对话框插入完毕。(见图3)

第四步:添加resource.h。我们把第四步插入的对话框ID改为IDD_MAIN ,在FileView中有个Header Files的文件,上面点击右键,选择Add Files to Folder...(添加文件到目录),弹出一个工程目录窗口,中间找到resource.h,然后OK了(添加)。(见图4)

第五步:复制代码。双击Main Dialog.cpp,我们写代码的位置出现了(见图5),那里有几行代码,把它们全部删掉,下面已经准备好的代码全部复制到那里,编译,执行,您的是否成功了? #include "stdafx.h" #include "resource.h" #include BOOL WINAPI Main_Proc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam); BOOL Main_OnInitDialog(HWND hwnd,HWND hwndFocus,LPARAM lParam); void Main_OnCommand(HWND hwnd,int id,HWND hwndCtl,

MFC入门--对话框实例

MFC入门--对话框实例 实例1 目的:设计一个基于对话框的程序,界面上有一个“延迟6秒”的按钮,点击后,程序主窗口在6秒内无法拖动。 关键点:MFC程序入门、线程与进程、消息机制 操作过程: 1-新建项目,选择MFC AppWizard (exe),命名项目为“SingleThread”。如图: (注:关于各项目类型的说明,请参见文件“VC功能简介.ppt”的第8页) 2-选择“Dialog based”,点击Finish,仔细观察项目信息。

3-在资源视图内对主对话框添加静态文本:“我的第一个MFC程序”和“演示耗时的单线程”,继而添加一个按钮,按钮现实文字“延迟6秒”,如图: 4-在资源视图内,双击“延时6秒”按钮,为其添加BN_CLICKED消息(按下按钮时发出的消息)的响应函数OnButton1()。在其中添加代码: Sleep(6000); 请根据老师对程序的讲解,思考如下问题: 1.类的继承:三个的类(CAboutDlg、CSingleThreadApp、CStringThreadDlg) 的继承轨迹是怎样的? 2.程序的入口在哪里?有没有类似Win32 Application中对于WM_CREATE的 处理? 3.三个类的对象的关系。 4.消息如何映射?

设计一个基于对话框的程序,开始运行后,每两秒弹出一个消息框。 关键点:MFC程序入门;定时器的建立、使用与删除;消息映射 操作过程: 1-新建项目,选择MFC AppWizard (exe),命名项目为“Test”。 2-选择“Dialog based”。 3-在BOOL CTestDlg::OnInitDialog()函数中添加 SetTimer(1,2000,NULL); // 启动定时器 4-通过ClassWizard给对话框添加WM_DESTROY的响应函数。如图: 在其中添加代码: KillTimer(1); 5-通过ClassWizard给对话框添加WM_TIMER的响应函数。在其中添加代码: if(nIDEvent==1) { ::MessageBox(0,"嘿嘿","你点啊!!",MB_OK); } 请根据老师对程序的讲解,思考如下问题: 1.MFC下与Win32 Application下定时器的使用有什么不同,又有什么相同之 处?

MFC对话框程序中的各组件常用方法

MFC对话框程序中的各组件常用方法: Static Text: 将ID号改成唯一的一个,如:IDC_XX,然后进一次类向导点确定产生这个ID,之后更改Caption属性: GetDlgItem(IDC_XX)->SetWindowText(L"dsgdhfgdffd"); 设置字体: CFont *pFont = new CFont; pFont->CreatePointFont(120,_T("华文行楷")); GetDlgItem(IDC_XX)->SetFont(pFont); Edit Control: 设置文本: SetDlgItemText(IDC_XX,L"iuewurebfdjf"); 获取所有输入: 建立类向导创建一个成员变量(假设是shuru1,shuru2……)类型选value,变量类型任选。 UpdateData(true); GetDlgItem(IDC_XX)->SetWindowText(shuru1); 第一句更新所有建立了变量的对话框组件,获取输入的值。第二句将前面的IDC_XX的静态文本内容改为shuru1输入的内容。 若类型选用control: 1.设置只读属性: shuru1.SetReadOnly(true); 2.判断edit中光标状态并得到选中内容(richedit同样适用) int nStart, nEnd; CString strTemp; shuru1.GetSel(nStart, nEnd); if(nStart == nEnd) { strTemp.Format(_T(" 光标在%d" ), nStart); AfxMessageBox(strTemp); } else { //得到edit选中的内容 shuru1.GetWindowText(strTemp); strTemp = strTemp.Mid(nStart,nEnd-nStart); AfxMessageBox(strTemp); } 其中nStart和nEnd分别表示光标的起始和终止位置,从0开始。strTemp.Format 方法用于格式化字符串。AfxMessageBox(strTemp)显示一个提示对话框,其内容是字符串strTemp。 strTemp = strTemp.Mid(nStart,nEnd-nStart)返回一个被截取的字符串,从nStart开始,长度为nEnd-nStart。如果nStart == nEnd说明没有选择文本。 注:SetSel(0,-1)表示全选;SetSel(-1,i)表示删除所选。

(适合初学者)MFC基础教程

Visual C++/MFC初学教程 目录 +-- 第一章VC入门 |------ 1.1 如何学好VC |------ 1.2 理解Windows消息机制 |------ 1.3 利用Visual C++/MFC开发Windows程序的优势|------ 1.4 利用MFC进行开发的通用方法介绍 |------ 1.5 MFC中常用类,宏,函数介绍 +-- 第二章图形输出 |------ 2.1 和GUI有关的各种对象 |------ 2.2 在窗口中输出文字 |------ 2.3 使用点,刷子,笔进行绘图 |------ 2.4 在窗口中绘制设备相关位图,图标,设备无关位图|------ 2.5 使用各种映射方式 |------ 2.6 多边形和剪贴区域 +-- 第三章文档视结构 |------ 3.1 文档视图框架窗口间的关系和消息传送规律 |------ 3.2 接收用户输入 |------ 3.3 使用菜单

|------ 3.4 文档,视,框架之间相互作用 |------ 3.5 利用序列化进行文件读写 |------ 3.6 MFC中所提供的各种视类介绍 +-- 第四章窗口控件 |------ 4.1 Button |------ 4.2 Static Box |------ 4.3 Edit Box |------ 4.4 Scroll Bar |------ 4.5 List Box/Check List Box |------ 4.6 Combo Box/Combo Box Ex |------ 4.7 Tree Ctrl |------ 4.8 List Ctrl |------ 4.9 Tab Ctrl |------ 4.A Tool Bar |------ 4.B Status Bar |------ 4.C Dialog Bar |------ 4.D 利用AppWizard创建并使用ToolBar StatusBar Dialog Bar |------ 4.E General Window |------ 4.F 关于WM_NOTIFY的使用方法 +-- 第五章对话框 |------ 5.1 使用资源编辑器编辑对话框 |------ 5.2 创建有模式对话框

Visual C++基于对话框的MFC应用程序---简单的时钟实例实验一

1.1 创建对话框的应用程序 1.使用AppWizard创建应用程序框架 首先,创建一个对话框应用程序,其工程文件名为:ch1.dsp。具体步骤如下: (1)启动Visual C++ 6.0,在File菜单中选择new菜单项;(2)在new对话框的Project页中选择 MFC AppWizard(exe)选项,在Project name框中输入:ch1,并在Location 框中指定希望的目录路径,编译系统生成的各种文件将会存放在该目录下,然后点击[OK]按钮 (3)MFC AppWizard-Step1 中选择Dialog based 选项,MFC AppWizard-Step2 到MFC AppWizard-Step4中取默认选项;(4)进入VC对话框设计界面后,选中 [TODO:在这里设置对话控制。]静态框并按del键删除该框,选中[取消]按钮并按del键删除该按钮; (5)将[确认]按钮拖曳到对话框的下方中间。生成的对话框设计窗口(如图1-1所示)。 图1-1

2.向类中添加系统消息响应函数 Windows应用程序的采用事件触发、消息驱动机制和大量的消息响应函数构成了应用程序的主体。本示例需要用到两个消息响应函数OnCtlColor()和OnTimer(),前者响应窗口消息:WM_CTLCOLOR,后者响应窗口消息:WM_TIMER。关于这两个函数的功能和用法暂且略过,留待后面小节再叙。这里先介绍响应函数加载的方法。 在CCh1Dlg类中添加OnCtlColor( )函数的操作方法如下:(1)打开类向导(MFC ClassWizard)窗口,选择Message Maps 页; (2)选择工程、类和对象标识。在Message Maps页的Project、Class name、Object Ids框中 分别选择:ch1、CCh1Dlg、CCh1Dlg; (3)添加响应函数。在Message Maps页的Messages框中选中并双击窗口消息:WM_CTLCOLOR,此时,消息WM_CTLCOLOR 的响应函数OnCtlColor( )被添加到类向导底部Member Functions框中。 注意,添加OnTimer( )函数的过程与上述过程相似,只是第(3)步选择WM_TIMER消息,而不是WM_CTLCOLOR。 添加完毕后,按[OK]按钮退出类向导。回到项目工作区,在项目工作区窗口展开CCh1Dlg类,可以看到类中添加了OnCtlColor( )和OnTimer( )两个消息响应函数。

MFC对话框向主窗体传递消息机制

对话框向主窗体传递消息,在视图中显示 现举例说明对话框向主窗体传递消息,以及主窗体响应消息的过程。我们拿单文档来说明,我们要实现下列功能:通过对话框,在文本框中输入字符串,在视图中显示刚才输入的字符串。 1、在应用程序向导中选择单个文档,然后完成。我这里的项目名称为mybook 2、在资源视图中,插入一对话框,对话框名称为dlg_wzm。 3、在刚才生成的对话框中插入一文本框,设置好相应的类和变量。为确认按钮生成响应函数。同时在mybook.cpp的BOOL CMyBookApp::InitInstance()函数中让该对话框启动,也就是加入CDlg_wzm dlg; dlg.DoModal();两行程序,当然在前面的要加入#include "dlg_wzm.h"。(详细过程略) 4、下面重点在于点击该对话框的确认按钮向主窗体发送消息。要现定义一个消息名称。

在stdafx.h文件中加入一行: #define WM_MYMESSAGE WM_USER+100 5、在CMainFrame的pulic申明中加入一变量CString wzmstr。目的是为了保存对话框中的字符串的值。在对话框的Onok()函数中: void CDlg_wzm::OnOK() { // TODO: Add extra validation here this->UpdateData(true); CMainFrame* pWnd=(CMainFrame*)AfxGetMainWnd(); //得到父窗体的指针 pWnd->wzmstr=this->m_input_edit; ASSERT(pWnd!=NULL); ::SendMessage(pWnd->GetSafeHwnd(), WM_MYMESSAGE,0,0); //发送消息 //注意WM_MYMESSAGE就是我们前面定义的消息。 //CDialog::OnOK(); } 6、下面我们看看主窗体怎么接受消息。我们要在主窗体中设置消息映射。 在mainfrm.h的protected声明中: afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); 在mainfrm.cpp文件中, BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code ! ON_WM_CREATE() ON_MESSAGE(WM_MYMESSAGE,OnMyMessage) //这里是我们加入的。 //}}AFX_MSG_MAP END_MESSAGE_MAP() 然后在mainfrm.cpp的文件最下面加入一个函数: void CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam) { CView *pView=this->GetActiveView(); //得到视图指针 if(pView)

在VC对话框中实现打印和打印预览

在VC对话框中实现打印和打印预览(附实现步骤) 时间:2008-01-27作者:佚名 在一般的软件开发中打印和打印预览是经常要用到的功能,对于VC6.0中的文档/视图(Doc/View)框架,可以很方便的使用缺省的打印和打印预览。但是,如果应用程序是基于对话框的就没有办法利用这种便利。而很多情况下,基于对话框的程序也需要打印和打印预览功能。那该怎么办呢?这正是本文将要解决的问题。 1实现打印 在对话框应用程序中不具备MFC的视和框架交互,要想实现打印和打印预览必须直接获取打印机的设备环境句柄,这时可以设置CPringDialog类中的构造函数的参数,获取打印机的设备环境句柄。利用这个句柄,转换为指针,则按打印流程实现打印任务。 (1)从CFrameWnd类派生出主窗口类CMyFrameWnd加入项目,这个类将作为控制类来实现程序的打印和打印预。 (2)在CMyFrameWnd中加入打印和打印预览相关的函数,为了方便起见,名字和CView视图类中缺省的打印和打印预览虚函数名相同。但这些函数是以成员函数的形式加入的,而不是重载。这里主要介绍Print和OnPrint函数。 Print函数是打印控制函数,由它来弹出打印对话框,取得用户设置信息,如打印机、纸张大小等。还有建立一个打印机DC和设置DOCINFO 结构,该结构包含输入输出文件名及其它一些信息,StartDoc函数要该结构作参数。还要设置打印区域,调用打印函数等 void CMyFrameWnd::Print() { CDC dc; CPrintDialog printDlg(FALSE); if (printDlg.DoModal() != IDOK) //弹出打印对话框,取得用户设置参数 return; dc.Attach(printDlg.GetPrinterDC());

MFC编程基础教程

第1章基于对话框的Windows应用程序 1.简介Windows编程的两种方法,即Windows API编程和MFC编程。 2.基于对话框的应用程序的创建过程: ?建立基于对话框的MFC 应用程序框架; ?放置控件; ?设置控件属性; ?为控件连接变量,即为控件命名; ?添加并且编写消息处理函数。 3.常用基本控件: ?静态文本框:主要用来显示文本信息,不能接受用户输入 ?命令按钮:是最常见的、应用最广泛的一种控件。在程序执行期间,当单击某个命令按钮后就会执行相应的消息处理函数。 ?编辑框:是一个文本编辑区域,用户可以在该区域输入、编辑和显示正文内容。 ?框架:将一组相关的控件框起来,达到标识一组控件的作用。 ?单选按钮:用户在一组单选按钮中最多只能选择一项。当某一项被选定后,其他选项自动变成未选状态。 ?复选框:列出了可供选择的项,用户可根据需要选择其中的一项或多项,各选项之间的状态互不相关。 ?列表框:通过显示多个选项,供用户选择,达到与用户对话的目的。 ?组合框:组合了编辑框和列表框的特性而形成的一种控件。在列表框中列出可供用户选择的项,当用户选定某项后,该项内容自动装入编辑框中。 ?滚动条:通常附在对话框上用来协助观察数据或确定位置,也可以用来作为数据输入的工具。 1.1 Windows编程基础 Windows 应用程序的主要特点是: ?具有标准的图形用户界面。 ?具有与硬件无关的特性。 ?采用“消息传递,事件驱动”的运行机制。 用Visual C++ 编写Windows 应用程序主要有两种方法:一是使用Windows 提供的应用程序接口(Application Programming Interface ,API )函数;二是使用Microsoft 提供的微软基础类(Microsoft Foundation Class ,MFC )。

基于MFC对话框的报表打印和预览功能(推荐文档)

基于MFC对话框的报表打印和预览功能 第一步:在工程中加入实现打印功能的四个文件PrintFrame.h, PringtView.h,PrintFrame.cpp, PrintView.cpp CPrintFrame和CPrintView类是两个个可重用的类,开发者只需要把这两个类对应的四个文件拷贝到工程文件所在目录中(PrintFrame.h, PringtView.h,PrintFrame.cpp, PrintView.cpp),并将这四个文件加入工程,并在需要执行打印功能的代码处加入 #include "PrintFrame.h" #include "PrintView.h" 第二步:添加三个消息响应函数来执行该功能 ON_MESSAGE(WM_BEGIN_PRINTING,OnBeginPrinting) ON_MESSAGE(WM_END_PRINTING,OnEndPrinting) ON_MESSAGE(WM_MY_PRINT,OnMyPrint) 这三个消息响应函数放在.cpp文件的BEGIN_MESSAGE_MAP(CReportDlg, CDialog)与END_MESSAGE_MAP()之间,如下:BEGIN_MESSAGE_MAP(CReportDlg, CDialog) //{{AFX_MSG_MAP(CReportDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_MESSAGE(WM_BEGIN_PRINTING,OnBeginPrinting) ON_MESSAGE(WM_END_PRINTING,OnEndPrinting) ON_MESSAGE(WM_MY_PRINT,OnMyPrint) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) //}}AFX_MSG_MAP END_MESSAGE_MAP() 其中OnMyPrint是跟具体要打印什么内容有关的开发人员要重点完成的代码,可以打印表格,图片,数据,只要GDI绘图可以进行的操作在这里都可以完成。由于打印预览的一部分工作在CView类里完成,因此在用户程序中只需要相应 WM_MY_PRINT消息就可以执行打印预览的功能,而不需要另外编写打印预览代码。 第三步: 建立一个CPrintFrame的对象,设该对象的指针为pFrame,并将对话框的指针传给该对象的m_pCallerDlg,即pFrame->m_pCallerDlg = this;

创建基于对话框的MFC工程(详细图示)

实例001 如何创建基于对话框的MFC工程 《Visual C++开发实战1200例(第I卷)》本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Visual C++进行程序开发各个方面的知识和技巧,主要包括编程基础、界面设计、应用程序控制和图形图像。本节为大家介绍实例001 如何创建基于对话框的MFC工程。 AD: 第1章开发环境 工程创建 开发环境设置与使用 程序调试 1.1 工程创建 实例001 如何创建基于对话框的MFC工程 要使用Visual C++开发软件,首先要创建一个工程,而基于对话框的MFC工程则是用户广泛使用的工程。图1.1将是一个新创建的基于对话框的MFC工程。本实例将介绍如何创建基于对话框的MFC工程。

( New窗口的Projects选项卡中选择MFC AppWizard[exe](MFC应用程序向导)选项,在Project name文本框中输入创建的工程名"Hello",在Location文本

(2)单击OK按钮,弹出MFC AppWizard-Step 1窗口,如图1.3所示。 在MFC AppWizard-Step1窗口中可以指定生成框架的类型。 Single document:生成单文档应用程序框架。 Multiple documents:生成多文档应用程序框架。 Dialog based:生成基于对话框的应用程序框架。 Document/View architecture support:选中该复选框,允许生成文档/视图和非文档/视图结构程序。 (3)本实例选中Dialog based单选按钮,创建一个生成基于对话框的应用程序。单击Next按钮,弹出MFC AppWizard-Step 2 of 4窗口,如图1.4所示。

MFC中在一个对话框中弹出另一个对话框

在一个对话框中点按一个按钮弹出另外一个对话框。 弹出的对话框可以是模态和非模态两种,简单点讲,模态对话框就是在弹出的对话框没有关闭之前,是不能操作父对话框的。非模态可以。 这里介绍建立模态对话框。 在建立的时候可以有两种形式,一种是直接新建,一种是将已有的对话框整合添加进来。 (我是在WinCE平台下。也是类似MFC的) 第一种方式:新建弹窗 操作步骤 首先按步骤建立一个简单的对话框,并添加按钮。 然后点击Dialog 添加资源 选择Dialog 新建

此时会出现新建好的对话框,右击选择属性可以修改名称。 设计新建的对话框 在对话框上右击选择添加类

填写类名称,点击完成 此时在解决方案资源管理器视图中就会有新建的类,源文件及头文件

将这个头文件包含到主对话框的头文件中。 然后就是调用关系的产生, 双击主窗口在中的按钮,添加相应的处理函数 此时调试运行,点“刀”按钮,就会弹出设计好的刀的对话框。 当然,刀对话框中的设计就是走原来熟悉的路了。 另外一个键“剑” 也是同样的步骤。 这样弹出的对话框有个问题,就是感觉弹出的对话框缩放了,字体变小了。在对话框上右击选择属性就可以看见设置字体的选项了,修改字体即可。

下来介绍第二种方式,添加现有的窗口。第一步:同样按部就班的建立好基本工程。编译一下(F7) 第二步:拷贝文件 首先在当前工程目录下新建一个文件夹用来存放原有工程源码

需要拷贝下面选中的这几个文件。拷贝到新建的这个文件夹下。由于现有工程中有resource.h文件,所以需要提前改一下名称,相应的WifiConfig.rc文件中有调用到这个文件,所以也要修改。用记事本打开.rc文件,将#include“Resource.h” 改为#include “Resource_2.h”(如果是准备新建文件夹来组织代码的话就可以不用改。就像下面这样,其实可以不用改)将这几个文件拷贝到新建的文件夹下。 还需要将原有工程res目录下的图标拷贝到现在工程的res目录下 第三步:添加文件到工程 首先是资源文件添加 现有项,找到WiFI2Uart目录下的.rc文件。确定。

简易MFC对话框程序设计教程

简易MFC对话框程序设计教程 天津大学仁爱学院信息系杨晓龙 我们之前所学习的C语言是一种面向过程的语言,重点在于程序或算法执行过程,提供那些过程才能实现程序,每一个操作都由我们自己完成。C++是一种面向对象的语言。对象是一个封装体,是一个实例,它里面不仅封装了程序运行时所需变量,更重要的是它还封装了程序运行所需操作即函数,其实真正定义它们的是一种叫“类”的数据结构,不过要引用里面的数据和操作必须通过类所定义的对象。这样做的好处是可以把经常使用的,属于同一类型的数据和操作包含在类当中,在编程时通过该类所实例化的对象调用它们(对象避免了重复,而且对象可以代表一种变量、一个实例或某个控件),简化了代码,提高了代码的复用性,增强了程序的可移植性,降低了错误发生率,摆脱了每次编写程序都要编写大量代码的麻烦。MFC(Microsoft Foundation Class)是微软提供给编程者的基础类库,它里面包含了创建对话框程序所需的各种类,在向导的帮助下,它会自动生成一些代码,我们只需调用它里面的少量成员函数便可完成对话框的创建和对话框程序的编程,如果让我们自己编写将是浩大而艰难的工程。MFC将常用的几乎所有的有关对话框的函数和变量封装起来,使我们避免了编写复杂而且重复的代码。 用C语言所编写的程序是DOS程序,只能在黑乎乎的DOS界面下运行,但C语言是C++的基础,而C++又是MFC的基础,用MFC编写的是windows应用程序有对话框,所以要回MFC 编程得先学C语言和C++才能学MFC。以下将以编写求三角形面积的程序为例说明简单MFC 程序的制作方法。 打开vc6.0,文件—新建—选择MFC AppWizard(exe),工程名称“三角形面积计算器”—确定—选择“基本对话框”,此时即可点“完成”,也可点下一步,直到出现询问“您希望使用MFC库吗?”若选择“作为共享的DLL”,则程序在未安装vc6.0的电脑上无法运行;若选择“作为静态的DLL”,则程序在未安装vc6.0的电脑上也能运行。此后一直点确定即可。 点击“完成”后出现由向导创建的基本对话框,在对话框上点右键—属性,可更改对话框标题和字体。在右侧选择组件,先插入三个编辑框作为三角形三边长,在插入一按钮发出计算命令,然后再插入一编辑框作为面积输出。在每一个编辑框旁配上静态文本说明,修改按钮标题。在vc6.0左侧的资源视图中选中关于对话框,可修改版本信息。至此对话框主体设计完成。 以下是程序最关键的部分。我们拥有C语言的基础,用C语言编写三角形面积代码(算法)不是问题,问题在于如何将编辑框中输入的数据传给算法中的变量以及如何使计算完成的结果输出到编辑框。实现这一数据交换(传输)有七中方法,其中最简单、最直观、最实用的方法是将编辑框与算法中的变量其的关联。步骤如下:选中对应编辑框,右键选择建立类向导,选择“Member Variables(成员变量)”选项卡,选择要关联变量的控件ID号,再点击“Add Variable(添加变量)”,设定变量名如“m_sizeA”,在Variable Type(变量类型)中选择float(不同程序视所需变量类型确定),OK。同样方法,将其他两边和面积分别关联变量。这样就使编辑框分别与各变量取得了关联,以后可认为编辑框和变量是一样的,对变量的任何操作都会反映到编辑框中,接下来我们就可以像编C程序一样编写代码了。可是代码应该写在什么地方呢,程序在什么时候执行呢?我们的目的是在按下计算按钮后程序执行,所以还需对按钮进行设定,让按钮被按下后执行程序。这个过程被称作消息捕获,操作系统捕获到“点击”的消息后将信息传给应用程序,应用程序便转入执行算法。在按钮上点击右键,选择“建立类向导”,选择“Message Maps(消息地图)”选项卡,选中按钮ID号,在“Messages(消息)”中选中“BN_CLICKED(按钮单击)”消息响应方式(因为按钮可以有单击、双击、移动等多种操作,所以对应有多种消息响应方式,即选择:当对按钮执行怎样的操作后执行消息响应函数),然后点击“Add Function(添加消息响应函数)”添加响应消息的函数或操作,也就是指当按钮被按下后要做什么,在弹出的对话框中可以更改函数名,确定后点击“Edit Code(编辑代码)”便自动转入消息响应函数中,我们就可以在这里写我们的算法代码了。代码如下:

MFC简单的登录对话框

登录对话框 我们利用MFC编写一个简单的登录对话框。主窗体是单文档界面。程序运行的时候,先弹出一个简单的登录对话框,输入用户名和密码后主窗体显示出来。 1、开打VC++6.0。点击文件,新建,点击工程中的MFC AppWizard(exe),在右边选择工程保存的位置,并且为工程取好名字。 2、点击确定后,选择单个文档,你可以一直点击下一步,直到完成,或者在这里直接点击完成即可,完成后界面如下。 3、点击工具栏中的“!”号试着编译运行一次,看是否有问题。如果没有问题,我们继续。点击左边的ResourceView,在Dialog上面鼠标右键单击弹出一弹出框,单击Insert Dialog。

4、在右边新增的对话框中,适当改变窗口大小,加入静态文本框和文本编辑框。 输入用户名:。然后回车

同样在下面的第二个静态文本框的属性标题改为:输入密码:。然后回车。 6、在第一个文本编辑框上右键单击,点击属性,把ID框中的IDC_EDIT1改为容易理解的名字,如:IDC_EDIT_NAME,注意前面的IDC_EDIT最好不要去掉,这样容易见名而知义。同样,对第二个文本编辑框的属性中的IDC_EDIT2改为:IDC_EDIT_PWD 7、在对话框上的任何空白的地方右键单击,点击建立类向导。

然后弹出 选择建立Create a new class,点击OK。 这是为这个对话框创建一个新的类。在Name中,为该对话框类取个名字:CDlg_login。下面的Base class以及Dialog ID不要随便改动。然后点击OK。这样新的类CDlg_login就与本对话框建立起了联系。

MFC对话框几个对话框程序例子建立对话框与相应程序相关联

MFC对话框和对话框类几个对话框程序例子建立对话框与相应的程序相关联如何建立对话框与相应的程序相关联: 在MFC中,对资源的操作都是建立相关的类来完成的; 所以我门先NEW 一个对话框资源然后建立他的类与相应的应用程序相关联就可以; 步骤: 1 NEW 一个对话框资源 2 在资源上选择 Classwarrzd上创建一个新的类(或在资源上双击左键) 3 起名字!(注意文件名将会去掉C 例如我门的名字叫 CDaiDlg那么文件名是 DaiDlg); 对话框的俩种类型: 1 模态对话框(特性:当建立模态对话框时,将不允许用户点击对话框以外的控件后应用程序本身,也就是说当模态对话框建立时应用程序停止运行而只运行对话框,所以模态对话框是可以使用局部变量的定义方法的!) 模态对话框是比较方便的一种对话框~建立函数: int CDialog::DoMadol() //注意他是CDialog类成员也就是说想使用先建立一个 CDialog 对象吧 如果我门想要在View类中建立一个 CDialog对象不要忘了要在View的Cpp 文件中包含 CDialog.h 2 非模态对话框(特性与模态的相反) 使用成员函数 BOOL CDialog::Create( UINT nIDTemplate, CWnd* pParentWnd = NULL ); nIDTemplate 为对话框的ID号 pParentWnd 拥有这个对话框的对象指针,如果是NULL 为默认的主应用窗口也就是 Frame应用窗口 注意如果我门在使用Create创建非模态对话框时要调用一个函数来显示这个对话框 CWnd::ShowWindow(SW_SHOW);不仅这样非模态对话框时不能是局部变量!

(完整word版)MFC可收对话框实现

MFC可收缩对话框实现 1可收缩对话框使用 可使用窗口的SetWindowPos()函数,下面重点介绍一下这个函数及具体实现过程。 1.1S etWind owPos函数说明 BOOL SetWindowPos(HWND hWndlnsertAfter, int X,int Y,int cX,int cY,UNIT Flags): 1.1.1hWndInsertAfter 此句柄用于控制对话框在Z轴上的显示顺序,它可以是以下值: ?一个窗口句柄:则对话框会显示在此窗口的下一层; ?HWND_BOTTOM:将窗口置于Z序的底部; ?HWND_DOTTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后);?HWND_TOP:将窗口置于Z序的顶部。 ?HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。 1.1.2X、Y 相对以客户坐标指定窗口新位置的左边界、上边界;注意,这个X、Y是相对于调整之前窗口的左上角坐标而言的,即(0, 0)表示左上角不变。 1.1.3cX、cY 指定调整后新窗口的宽度和高度;

1.1.4Flags 指定窗口尺寸和定位的标志。它可能为以下值: ?SWP_ASNCWINDOWPOS:如果调用进程不拥有窗口,系统会向拥有窗口的线程发出需求。这就防止调用线程在其他线程处理需求的时候发生死锁。 ?SWP_DEFERERASE:防止产生WM_SYNCPAINT消息。 ?SWP_DRAWFRAME:在窗口周围画一个边框(定义在窗口类描述中)。 ?SWP_FRAMECHANGED:给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没有改变也会发送该消息。如果未指定这个标志,只有在改变了窗口尺寸时才发送WM_NCCALCSIZE。 ?SWP_HIDEWINDOW:隐藏窗口。 ?SWP_NOACTIV A TE:不激活窗口。如果未设置标志,则窗口被激活,并被设置到其他最高级窗口或非最高级组的顶部(根据参数hWndlnsertAfter设置)。 ?SWP_NOCOPYBITS:清除客户区的所有内容。如果未设置该标志,客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。 ?SWP_NOMOVE:维持当前位置(忽略X和Y参数)。 ?SWP_NOOWNERZORDER:不改变z序中的所有者窗口的位置。 ?SWP_NOREDRAW:不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。 ?SWP_NOREPOSITION:与SWP_NOOWNERZORDER标志相同。 ?SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。?SWP_NOSIZE:维持当前尺寸(忽略cx和Cy参数)。 ?SWP_NOZORDER:维持当前Z序(忽略hWndlnsertAfter参数)。 ?SWP_SHOWWINDOW:显示窗口。 对于对话框程序,通常只用设置为:SWP_NOZORDER|SWP_NOMOVE,即保持左上角坐标不变,且保持Z轴顺序不变。

mfc单文档插入对话框

2012/7/18 1.新建一个mfc单文档工程Test. 2.在资源视图中,dialog处右键insert dialog. 3.在新建的dialog上右击,属性-style-child,对话框上双击,新建类 name CCdialod,选择base class为cformview. 4.在cmainframe类上添加变量CSplitterWnd m_wndSplitter选为 protected. 5.classwizard在cmainframe中重载OnCreateClient函数 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { m_wndSplitter.CreateStatic(this,1,2); m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CTestView), CSize(1100, 0), pContext); //CMy039View是视图类 m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CCdialod), CSize(0, 0), pContext); //LDLG是对话框类 SetActiveView((CTestView*)m_wndSplitter.GetPane(0, 0)); //指定类视图 return true; } 6.在TestView.h中添加头文件 #include "TestDoc.h" 7.在mainframe.h中添加 #include "TestView.h" #include "Cdialod.h"

MFC之编写一个简单的登录对话框

编写一个简单的登录对话框 大家好,我们利用MFC编写一个简单的登录对话框。主窗体是单文档界面。程序运行的时候,先弹出一个简单的登录对话框,输入用户名和密码后主窗体显示出来。 1、开打VC++6.0。点击文件,新建,点击工程中的MFC AppWizard(exe),在右边选择工程保存的位置,并且为工程取好名字。 2、点击确定后,选择单个文档,你可以一直点击下一步,直到完成,或者在这里直接点击完成即可,完成后界面如下。 3、点击工具栏中的“!”号试着编译运行一次,看是否有问题。如果没有问题,我们继续。点击左边的ResourceView,在Dialog上面鼠标右键单击弹出一弹出框,单击Insert Dialog。

4、在右边新增的对话框中,适当改变窗口大小,加入静态文本框和文本编辑框。 输入用户名:。然后回车

同样在下面的第二个静态文本框的属性标题改为:输入密码:。然后回车。 6、在第一个文本编辑框上右键单击,点击属性,把ID框中的IDC_EDIT1改为容易理解的名字,如:IDC_EDIT_NAME,注意前面的IDC_EDIT最好不要去掉,这样容易见名而知义。同样,对第二个文本编辑框的属性中的IDC_EDIT2改为:IDC_EDIT_PWD 7、在对话框上的任何空白的地方右键单击,点击建立类向导。

然后弹出 选择建立Create a new class,点击OK。 这是为这个对话框创建一个新的类。在Name中,为该对话框类取个名字:CDlg_login。下面的Base class以及Dialog ID不要随便改动。然后点击OK。这样新的类CDlg_login就与本对话框建立起了联系。

相关文档
相关文档 最新文档