佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1158|回复: 16

用MFC 设计 GUI

[复制链接]
发表于 26-9-2006 12:25 AM | 显示全部楼层 |阅读模式
我做了一个c++的program ,,但学校教的output 只是黑白的command prompt..
如果用MFC wizard 的话,要怎implement 我的coding 在MFC??
比如说我按一个button,它就会call我code里的一个function
要怎么link 在一起?
看了一本MFC的书但都看不懂。。

[ 本帖最后由 pure 于 26-9-2006 12:36 AM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 26-9-2006 07:43 AM | 显示全部楼层
个人觉得wxwidget简单多了。
回复

使用道具 举报

fatcat 该用户已被删除
发表于 26-9-2006 07:35 PM | 显示全部楼层
原帖由 pure 于 26-9-2006 12:25 AM 发表
我做了一个c++的program ,,但学校教的output 只是黑白的command prompt..
如果用MFC wizard 的话,要怎implement 我的coding 在MFC??
比如说我按一个button,它就会call我code里的一个function
要怎么link 在一 ...


很简单!
1)打开新的PROJECT FILE
2) 选MFC APPLICATION
3) 选DIALOG BASE APPLICATION..PRESS NEXT..NEXT..FINISH
4) 你会看到一个 DIALOG
5) 把 Button Control drag and paste on the Dialog
4)然后 double click 那个 Button.
5) 把你的 coding 写在里面
6) Compile and Run!
回复

使用道具 举报

发表于 27-9-2006 01:37 AM | 显示全部楼层
个人不大喜欢用wizard,generate一堆看不懂的code.

基本上用cpp来写windows dialog,
你需要了解它有两个主要的东西..

1)一个main loop..
2)一个负责dispatch msg的wndproc(当然要知道msg 的code 啦)。。
example: WM_CLOSE,WM_KEYDOWn..之类的东西

就可以了。。
基本上你就是update 你的logic state,然后用window gd 画出来就可以了。。

还有,create window之前别忘了register wndClass 一下。。



  1. #include <windows.h>               

  2. LRESULT CALLBACK WndProc(HWND        hWnd,        UINT        uMsg,        WPARAM        wParam,LPARAM        lParam)       
  3. {       
  4.                 return DefWindowProc(hWnd,uMsg,wParam,lParam);
  5. }

  6. int WINAPI WinMain(HINSTANCE a,HINSTANCE b,LPSTR c,int d)
  7. {
  8.                 HINSTANCE myhin=NULL;       
  9.                 LPCTSTR myclassname="aaa";
  10.                 WNDCLASSEX aaa;

  11.                 //---------register --------------------------
  12.                 aaa.cbSize = sizeof(WNDCLASSEX);
  13.                 aaa.style= CS_HREDRAW | CS_VREDRAW;
  14.                 aaa.lpfnWndProc= (WNDPROC)WndProc;
  15.                 aaa.cbClsExtra= 0;
  16.                 aaa.cbWndExtra= 0;
  17.                 aaa.hInstance= myhin;
  18.                 aaa.hIcon= 0;
  19.                 aaa.hCursor= LoadCursor(NULL, IDC_ARROW);
  20.                 aaa.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);
  21.                 aaa.lpszMenuName= 0;
  22.                 aaa.lpszClassName= myclassname;
  23.                 aaa.hIconSm= 0;
  24.                 RegisterClassEx(&aaa);
  25.                 //-----------------------------------------------------

  26.                 HWND mywh= CreateWindow(myclassname, "tensaix2jsdfsdf", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, NULL, NULL, myhin, NULL);
  27.                 ShowWindow(mywh, d);
  28.                 UpdateWindow(mywh);

  29.                 //main loop
  30.                 MSG msg;
  31.                 while (GetMessage(&msg, NULL, 0, 0))
  32.                 {
  33.                         TranslateMessage(&msg);
  34.                         DispatchMessage(&msg);
  35.                 }       
  36. }
复制代码



最讨厌那些把东西给复杂化的tutorial..
回复

使用道具 举报

发表于 27-9-2006 09:37 AM | 显示全部楼层
楼上,tensaix2j 小姐用的是 c style的programming。。。不是mfc programming。。。

tensaix2j 小姐的方法很容易了解,但是coding需要写很多。。。

如果,你用 mfc style 的话,你必须先学会c++的object oriented programming。。。

用pure mfc style,你必须有3个东西,windows frame,document view和document template。。。你需要implement CWinApp,CFrameWnd,CDocument和CView这4个class。。。
回复

使用道具 举报

发表于 27-9-2006 10:00 AM | 显示全部楼层

回复 #4 tensaix2j 的帖子

wizard的用途,是用来简化你的工作。。。。

如果,你要build一个完整的mfc program的话,没有wizard的帮助下,你需要写很多coding。。。一共有4个class你需要implement。。。

通常,你用mfc wizard,wizard会帮你制作完整的结构,帮你implement那4个class。。。
整个结构,提供了print preview,file new,file open,file close还有view的结构,split window,tiled window和message loop的结构。。。经过修改,我们就可以设计出非常专业的program,类似word excel的程序。。。
回复

使用道具 举报

Follow Us
发表于 27-9-2006 12:39 PM | 显示全部楼层
上面的例子应该是去处wizard内过多及没必要的rountine吧..?
而且wizard只供初哥及偷工而设..

还有..你所谓的完整的结构...是否你真的有用完其功能?
如果没..干嘛把一堆没用的垃圾码弄大你的软件?
回复

使用道具 举报

发表于 27-9-2006 04:23 PM | 显示全部楼层

回复 #7 waiting_hoh 的帖子

你说那些routine是多余的???

那我请问你,楼上的PostQuitMessage(0)那里去了??
WM_PAINT的message呢?

你说那些routine是垃圾,哪你知道它们的用途吗?

还有,我4楼说的是mfc programming。。。不是c style的programming。。。

还有,我现在正在做着有print preview功能的mfc application。。。用着CWinApp,CFrameWnd,CDocument和CView这4个class。。。

你可以指出哪个是垃圾class吗??
如果你能指出哪个class是垃圾。。。我佩服你,拜你为师。。。

[ 本帖最后由 meemee 于 27-9-2006 04:25 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 27-9-2006 05:27 PM | 显示全部楼层
楼上二位很激动下。。
我只是给楼主一点idea,关于windows programming..
也没说是mfc..没想到我的code居然被你们拿来吵。。

p/s:称呼匿名就好了。
回复

使用道具 举报

发表于 28-9-2006 12:52 AM | 显示全部楼层
嗯嗯。。楼楼上的。。你说的全对。。给你1000%。。好吗?

还有。。为何你那么激动呢?
回复

使用道具 举报

发表于 28-9-2006 01:15 AM | 显示全部楼层
还记得那句 Message Base Event Driven......

如果楼主不是一定要UI, 只是要弄漂亮点,可以把你的dos程式加颜色。
回复

使用道具 举报

发表于 28-9-2006 09:17 AM | 显示全部楼层
上面的例子应该是去处wizard内过多及没必要的rountine吧..?
而且wizard只供初哥及偷工而设..

还有..你所谓的完整的结构...是否你真的有用完其功能?
如果没..干嘛把一堆没用的垃圾码弄大你的软件?


tensaix2j 用的例子很短,也没有多余的代码。。。容易明白。。。这点我赞成。。。

而且wizard只供初哥
这个我没有异议。。。

我上面有说过,wizard是用来简化你的工作。。。
的确不可否认,有些人用滥用wizard来偷工。。。

wizard可以帮你产生一个完整又没错误的代码,为何不用它??
难道,我们想制作一个错误百出,然后又用一大堆时间来debug??
即使,你多么厉害,manual写出来的coding难到没有error或bug??

你说的多余代码,我正在使用着。。。而且被人批评为垃圾代码,怎会不火???

mfc wizard制作出来的有些的确是多余的,但是它们真的不必要吗??
tensaix2j用的例子没有用到resource file,c/c++ header file,当然它的coding也比较简短。。。

如果你用mfc wizard制作一个有document/view support的application,它会帮你制作一个有file new,file open,file save,close,printer setup,print preview,file menu的toolbar,new window,arrange icon等等的功能。。。
对一些人来说,很多功能是多余的,但是它们真的不必要吗??

整个document/view提供的是"多"方面的功能。。。而且每个部分都是紧密的结合着。。。
回复

使用道具 举报

发表于 28-9-2006 09:34 AM | 显示全部楼层
VFP 也是有 Wizards,而且更多达十几种。

VFP教程里在 Rapid Application Development topic,Wizards 提供了一个快速开发的环境,简化编程人员时间和(除虫的)精力。Beginner 也可以钻研它原始码及修改它。

Wizards 虽提供了快速开发管道,却顾此失彼,大包袱使得软件的执行效力变慢,Visual 靠得就是 OOP 流程图,它的 class 的好处是 reuseable,高级编程师都有一个共同点,喜欢优化软件,这时候 class 就派上用场而淘汰 Wizard。
回复

使用道具 举报

发表于 29-9-2006 01:35 AM | 显示全部楼层
第一次看到 meemee 发火 。。 , 不过他的解释也让大家了解了 MFC , C style programming (俗称Win32 SDK programming)。 想当年, 自修学 Win95程序的时候, 第一章读的就是 C style programming 的WinMain , 当时的 Windows programming Framework 最有名的是 Borland 的 OWL (自 Windows 2.x 开始吧?), MFC 还要靠旁边站。

个人意见, 如果要用MFC , 不如用 wxWidgets 或FLTK。 比起GTK, QT , wxwidgets 和 FLTK 用的是 native widgets 。  如果不太在意performance ,想用 run-time 的话, 可以考虑Java , .Net 或者 wxpython

如果用wxwidgets 有入门问题, 我能够的话尽量帮忙。
回复

使用道具 举报

fatcat 该用户已被删除
发表于 29-9-2006 01:25 PM | 显示全部楼层
为何不要用 wizard 呢?
又快,简单,没有烦恼!
当然,我们也要懂得里面的 coding。 不过,如果不懂得话,也无所谓。。日后在漫漫学咯。
回复

使用道具 举报

发表于 29-9-2006 07:22 PM | 显示全部楼层
个人觉的各有各的好。。那位仁兄也批评的太极端了点。。
回复

使用道具 举报


ADVERTISEMENT

发表于 30-9-2006 12:43 AM | 显示全部楼层
用不用 wizard 是會隨著情況而變的

當趕時間而 wizard 可以解決大部分工作 - 選 wizard

有足夠的時間, 或者 wizard 大部分的功能都用不上, 或者需要重寫 - 不選 wizard
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 23-9-2024 09:21 PM , Processed in 0.163110 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表