第二步,点击“file”,在页面的最左上角,在下拉框中选择“New”;
第三步,页面d出一个对话框,最上面一栏分别为“Files”,“Projects”等,选择“Projects”;
第四步,在“Projects”下的选项栏里选择“MFC AppWizard[exe]”,然后在右上角的工程名字里输入你想要的名字,下边的选项栏里选择他的存储位置,选好后单击“OK”;
最后一步,单击OK后页面跳转,同时d出一个选项栏,选择最上面的那个“single document”就是你想要的单文档,然后在选项栏下边点击“Finish”即可。
这就是建立单文档工程的具体步骤了,OK~~~创建非模态的对话框
用MFC可以创建非模态的对话框,只是创建方式不同,模态对话框用
dlgDoModel()调用,而非模态对话框要用create函数创建调用。
/假设IDD_TEST_DLG为已经定义的对话框资源的ID号/
CTestDlg
dlg=new
CTestDlg;
dlg->Create(IDD_TEST_DLG,NULL);
dlg->ShowWindow(SW_SHOW);
在上面的代码中新生成了一个对话框对象,而且在退出函数时并没有销毁该对象。因为如果此时销毁该对象(对象被销毁时窗口同时被销毁),而此时对话框还在显示就会出现错误。那么这就提出了一个问题:什么时候销毁该对象。可以用如下方法:
在对话框退出时销毁自己:在对话框中重载OnOK与OnCancel在函数中调用父类的同名函数,然后调用DestroyWindow()强制销毁窗口,在对话框中映射WM_DESTROY消息,在消息处理函数中调用delete
this;强行删除自身对象。相关代码如下:
void
CTestDlg1::OnOK()
{
CDialog::OnOK();
DestroyWindow();
}
void
CTestDlg1::OnCancel()
{
CDialog::OnCancel();
DestroyWindow();
}
void
CTestDlg1::OnDestroy()
{
CDialog::OnDestroy();
delete
this;
}你运行的是blend for visual studio,不是visual studio,所以找不到这个模板。
也就是说你运行错了,自己看下上窗口的标题栏。
到开始菜单里重新找一下快捷方式,不要找错了。第一步:将glut32dll按路径:windows\system32\放入,
第二步:将glut32lib按路径:Microsoft Visual Studio\vc98\lib\放入
第三步:将gluth按路径:Microsoft Visual Studio\vc98\include\gl\放入 其次建立一个新工程
一:打开VC++60:工具栏:文件\新建,出现一个名为新建的对话框,选择工程选项卡,在其中选择WIN32 Console Application,并在右侧:工程名称(N)底下键入名称,在位置(Z)底下设置好存放路径,点击确定创建一个空的工程。
二:工具栏:工程\设置,出现一个名为Project Setting的对话框,选择连接项卡,在对象\库模块底下白框里最前面添上opengl32lib glu32lib glut32lib,之后点击确定
三:文件\新建,出现一个名为新建的对话框,选择文件选项卡,在其中选择C++ Source File, 并在右侧:文件名(N)底下键入名称,开始敲代码,这样只要代码无误,就可以运行出我们想要的结果创建一个完整窗口要经历的步骤:
1)设计一个窗口类;
2)注册窗口类;
3)创建窗口;
4)显示及更新窗口。
第一步:
windows 已经为用户定义了一个完整的窗口类,用户只需要将各个属性填满既可以。窗口类是一个 结构体,其定义如下:
typedef struct _WNDCLASS{
UINT style;//class style
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
}WNDCLASS;
第二步:
用RegisterClass(&wndclass)来定义的窗口注册。
第三步:创建窗口
1)定义一个句柄,然后用CreateWindow()来为句柄赋值。函数用法参看MSDN。创建窗口必须依据已经声明并且已经注册的窗口类型来创建。
HWND CreateWindow(
LPCTSTR lpClassName,//定义的窗口类名
LPCTSTR lpWindowName,//窗口的名字,将会在标题栏上显示出来的
DWORD dwStyle,//窗口的风格(窗口的外观模式和功能按钮等等)
int x,//窗口初始位置ws_usedefault
int y,//同上
int nWidth,//窗口的宽度,可以用ws_usedefault
int nHeight,//窗口高度,可以用ws_usedefault
HWND hWndParent,//父窗口的句柄,单一窗口则设置为空
HMENU hMenu,//菜单的句柄,如果没有菜单则将这个句柄设置为空
HINSTANCE hInstance,//由系统进行分配标识
LPVOID lpParam//一般设置为空
);
第四步:显示窗口
调用ShowWindow()函数来显示窗口。
ShowWindow(
HWND hWnd,//要显示的窗口的句柄
int nCmdShow//显示窗口的模式,如:最大化最小花显示
)
第五步:更新窗口
在显示窗口的函数调用完毕以后调用UpdateWindow()来对窗体进行更新
UpdateWindow(hwnd);//这个函数没有并不影响消息产生。
//消息循环
MSG msg;//定义了一个消息结构体变量
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
/
GetMessage(
LPMSG lpMsg,
//消息结构提的指针,无需对这个消息结构提的内部成员初始化,
//这个只需将定义的结构体的地址传到这里
HWND hWnd,
//窗口句柄,指明要获得的是那个窗口的消息,如果要获取所有窗口的消息则
//定义为NULL
UINT wMsgFilterMin,
//用来指定要从消息队列里边取得的最小值,
UINT wMsgFilterMax
//用来指定要从消息队列里边取得的最大值,
///////////////////////////////////////////////////////////////////////
//这两个参数用来限制GETMESSAGE 在消息队列里边的取值范围,//
//以去处调一些确定不感兴趣的消息 //
//if要从消息队列中所有的消息中提取的话则两个参数均设定为 //
//零 //
///////////////////////////////////////////////////////////////////////
);//从调用程序线程消息队列中取消息
/
有了创建窗口的整个流程以后,现在就开始定义窗口过程,用WindowProc()
LRESULT CALLBACK WindowProc(/函数名字可以更改,但是参数不允许改变/
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);//参数和消息结构提的前四个参数相同,事实上系统在调用窗口过程函数
//的时候自动将消息结构体的前四个参数传递到窗口过程
确定窗口关系,这样在之后的默认调用ShowWindow(系统调用,不需要自己的代码)就知道显示在哪里了。
获取的pTab的坐标数据。这是窗口类标准函数,获取的坐标是屏幕坐标,也就是相对于屏幕左上角。
获取的是pTab中属性页1的内边框坐标。坐标系为当前窗口pTab映射模式下的窗口坐标,相对于pTab的左上角。
它是ClassWizard对话框中最重要的选项卡,主要完成创建新类、添加、删除消息处理函数等任务。
该选项卡中包含了两个下拉列表框:Project下拉列表框和Class name下拉列表框;三个列表框:Object IDs列表框、Message列表框和Member functions列表框;一个文本信息框;四个工具按钮。
★ Project下拉列表框:该下拉列表框用于选择当前 *** 作的项目。当当前打开的工作区中包含多个项目文件时,用户可以从这个下拉列表框中选择将要 *** 作的项目文件。对于单项目工作区来说,其默认值就是项目文件。
★ Class name下拉列表框:该下拉列表框用于选择当前要 *** 作的类。当用户在Class name下拉列表框中选中了某个类之后,Object IDs窗口中的内容将会发生相应的变化。
★ Object IDs列表框:该列表框用于显示当前选定类中能够产生消息的对象的ID值。这些对象包括菜单选项、工具栏按钮选项、对话框以及各种控件等。
通常Object IDs列表框中所包含的第一个对象就是当前类名。
★ Message列表框:Message列表框中列出了对应于Object IDs列表框中所选中的当前项可以处理的消息以及可被重写的MFC虚函数。当Object IDs列表框中选定当前类名时,Message列表框前部分显示的是当前类所能覆盖的虚拟函数,后部分显示的是能够处理的消息。如Object IDs列表框中选定其它对象,则Message列表框显示的就是当前项可以处理的消息。
★ Member functions列表框:Member functions列表框中列出了在Class name下拉列表框中所选中的当前类包含的所有成员函数。其中用字母“V”标出的是MFC虚函数,用字母“W” 标出的是Windows消息处理函数。
★ 文本信息框:在Project下拉列表框的下方有一个文本信息框,用于显示当前选中类的源文件,包括h文件和cpp文件。该文本信息框中显示的内容会随着选定类的变化而变化。
★ Add Class按钮:该按钮用于向当前的Project中添加一个新类,新类可以是自己创建,也可以是从已有的文件中选取。
★ Add Function按钮:该按钮用于向当前选定类中为当前选定的消息添加一个消息处理函数。其中类是在Class name下拉列表框中选定的类;而当前消息则是在Message列表框中选定的消息。
Add Function按钮平时是灰化禁止的,只有当用户在Message列表框中选中某个特定的消息之后,该按钮才能正常显示,即此时才能使用。
★ Delete Function按钮:该按钮用于在当前选定的类中删除已有的成员函数。Delete Function按钮平时是灰化禁止的,只有当用户在Member functions列表框中选中某个消息处理函数之后,才能选择该按钮。
★ Edit Code按钮:单击该按钮将打开编辑窗口,并将光标位置自动跳到当前选定的成员函数的源代码处。
2 Member Variables选项卡
该选项卡主要用于添加与对话框中的控件相关联的成员变量,以便程序能利用这些成员变量与对话框中的控件进行数据交换。该选项卡与Message Maps选项卡一样,也包含Project下拉列表框和Class name下拉列表框,分别用于选定用户 *** 作的当前项目和当前类;Add Class按钮用于向当前项目中添加一个新类;一个文本信息框,用于显示当前选中类的源文件。
此外,Member Variables选项卡中还包含另一个列表框以及另外四个工具按钮。列表框中共有3列数据,分别为:
★ Control IDs:该项显示了当前选定类中能够映射成员变量的控件的ID值。所谓能映射成员变量的控件,就是可以使用类中的成员变量来代表某个控件,当控件发生改变时,该成员变量的值也发生相应变化。
★ Type:该项表示成员变量的类型。
★ Member:该项表示成员变量的名字。
注意:并不是所有的类都有这些信息,只有在选择了对话框类、有格式视图类或记录视图类时才能显示出这些信息。
★ Add Variable按钮:该按钮用于为当前选定的控件添加一个成员变量。
★ Delete Variable按钮:该按钮用于删除一个现有的成员变量。该按钮平时是灰化禁止的,只有当用户在Control IDs列表框中选中某个成员变量以后,才能选择该按钮执行删除工作。
★ Update Columns按钮:该按钮用于选定一个数据源,只在记录集合类中才可以使用。
★ Bind All按钮:只适用于记录集合类,单击此按钮将把所有未绑定的记录集里的数据成员绑定到数据源的一个表中相应的列上。在默认情况下,MFC AppWizard和ClassWizard将绑定所有的列,所以很少需要使用数据绑定。如果通过删除相关的数据成员将一些或所有列取消绑定,那么在这之后还可以重新绑定它们。
3 Automation选项卡
该选项卡允许用户加入方法或属性以增强Automation功能。
4 ActiveX Events选项卡
该选项卡允许用户加入事件以支持ActiveX控件。
5 Class Info选项卡
该选项卡用于显示和设置当前选定类中的一些重要信息。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)