标题:mfc初学者问题。。 有关窗口创建
只看楼主
xuyao18
Rank: 2
等 级:论坛游民
帖 子:50
专家分:30
注 册:2009-4-27
结帖率:22.22%
 问题点数:0 回复次数:8 
mfc初学者问题。。 有关窗口创建
小弟刚开始学习MFC编程,对于很多东西都不是特别的懂
老师要求我在两个星期以内做出一个点击菜单上的某个按钮,然后能弹出一个子窗口,这样的一个程序。
看了两天的百度,有了一点点概念,是先建立一个窗口类,再调用createwindow()这个函数来创建窗口。
但是,我一直很有疑惑,就是百度上面那些很多的比如定义窗口类和initinstance()这些函数具体是放在程序源代码的哪些地方的?
定义窗口类是在mainframe下面的precreatewindow()定义么?
在上面定义好窗口类以后,又是如何调用的?

补充一个问题:很多人都提到了从cwnd这个类派生,但是我再classwizard里面并没有找到这个类啊?真心求教
希望路过的高手指点指点。
谢谢!

PS:求MFC师傅!!
QQ385427132

[ 本帖最后由 xuyao18 于 2010-4-13 21:40 编辑 ]
搜索更多相关主题的帖子: 窗口 mfc 
2010-04-13 21:38
天使梦魔
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:0 
呼出新窗口代码可以放在按钮事件代码里,你可以右键你的窗口创造一个时间代码,也可以双击按钮(这个进去的是被按下的事件)
然后用你的新窗口类定义一个对象,然后调用那个成员.

你不太了解MFC.
你建立个MFC工程的时候会选择个窗口类形态,你可能选择了cwnd,你第一窗口就是这个类派生出来的,它有自己的名字.
你需要自己再去做一个,另外一个名字.


VC6.0你可以试着:
新建个MFC为对话框形态(基于对话框)
然后画个按钮,双击,提示你输入对话框名字,直接确定进去
复制下面在函数里面
CAboutDlg dlgAbout;
dlgAbout.DoModal();

点击按钮就是"关于"
CAboutDlg是里面关于对话框的类,你创造新类的方法就也这样
2010-04-13 21:51
xuyao18
Rank: 2
等 级:论坛游民
帖 子:50
专家分:30
注 册:2009-4-27
得分:0 
void CMainFrame::Onnew()
{
    // TODO: Add your command handler code here
    HWND hwnd;
    HINSTANCE hInst;
    hInst = AfxGetInstanceHandle();  //获取实例句柄
    CreateWindow("newClassName","newClassName",WS_OVERLAPPEDWINDOW, 0,0,600,400,NULL,NULL,hInst,NULL);
    ShowWindow(SW_SHOWNORMAL);
    UpdateWindow();
}

这是我在新的按钮new上写的一些代码,都是胡乱百度上抄来的。。。。
运行的结果是什么反应也没有。。。。。

下面是我再precreatewindow()里写的对类的定义
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    static BOOL s_bCreate = FALSE;
    if( !CFrameWnd::PreCreateWindow(cs) )
        return FALSE;
    if(!s_bCreate)
{
  WNDCLASS   wndclass;  
  ::GetClassInfo(AfxGetInstanceHandle(),cs.lpszClass,&wndclass);  
  wndclass.lpszClassName="newClassName";//必须采用新类名   
  AfxRegisterClass(&wndclass);  
  cs.lpszClass=wndclass.lpszClassName;   
  s_bCreate = TRUE;
 }
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs
}

请问楼上的    这样写能否获得实例的句柄?还有这样是否能够正确就是定义这个新的窗口类?
2010-04-13 22:01
天使梦魔
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:0 
我不说了么............
网上的人更笨,MFC用来干什么的都不知道.
新在MFC里建个类就可以了,一切用鼠标完成,写什么代码


自己看吧
01.rar (199.73 KB)
2010-04-13 22:34
xuyao18
Rank: 2
等 级:论坛游民
帖 子:50
专家分:30
注 册:2009-4-27
得分:0 
感谢!
查了两天的百度,感觉都挺不一样的。 谢谢我看看先。
2010-04-13 22:49
xuyao18
Rank: 2
等 级:论坛游民
帖 子:50
专家分:30
注 册:2009-4-27
得分:0 
嗯。。 再次感谢。。
再问个问题,就是通过这样的按钮新建窗口,就是跟原来的那个界面一样的那种窗口,而不是对话框的话,该如何操作?
概括点,我自己去研究就行,不用麻烦你截图了。很感谢你!

[ 本帖最后由 xuyao18 于 2010-4-13 22:55 编辑 ]
2010-04-13 22:53
天使梦魔
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:0 
我图里新建的那个窗口不就是你建立MFC时的主窗口么?
那个窗口就是个新的类.权限和功能是你那个MFC同一级别的.默认的也是对话框
第二张图里,你双击那个对话框就可以自己设计了.


如果是消息框就不带什么DD.
MessageBox(NULL,"1","1",0);
这个是消息框,加到按钮事件里.
2010-04-13 23:02
xuyao18
Rank: 2
等 级:论坛游民
帖 子:50
专家分:30
注 册:2009-4-27
得分:0 
对了,请问那个win.h是从哪来的?
为什么我的VC里面提示没有这样的头文件啊?
PS:如果说我是用 CreateEx这个函数来创建窗口,应该如何使用?

[ 本帖最后由 xuyao18 于 2010-4-14 16:25 编辑 ]
2010-04-14 16:07
Meng_huali
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-4-22
得分:0 
很简单 在你的菜单上右键添加事件处理
在里面用弹出来在对话框类创建一个对象 如dlg
dlg.DoModal();
就行了
2010-04-22 14:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-302884-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.337501 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved