请教C#和MFC的区别

BrillianceRen 2012-08-04 12:44:12
例如新建一个对话框
MFC可能要做
DoModal();
PreSubclassWindow();
OnCreate();
OnSize();
OnMove();
OnSetFont();
OnInitDialog();
OnShowWindow();
OnCtlColor();
OnChildNotify();

还有重绘的
OnDraw();
OnPaint();

捕获按键的
PreTranslateMessage();

消息相关的
PostMessage();
SendMessage();

等等

在C#中创建一个窗体的系统调用顺序是什么?
有没有类似上边举例对应的相关函数?
...全文
836 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvq49 2012-09-20
  • 打赏
  • 举报
回复
首先你找到Program.cs这个文件,打开,在main函数里有个Application.run(你的第一个显示窗体),这就是入口
BrillianceRen 2012-08-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

难道不能单步调试看看执行流程?

F10 F11
[/Quote]
有很多事件不是单步触发的,有的是条码扫描触发,有的是RFID读卡器触发,有的是放射源检测器触发,还有GSM触发等等,乱七八糟很多模块
-小仙- 2012-08-06
  • 打赏
  • 举报
回复
难道不能单步调试看看执行流程?

F10 F11

跑着的程序员 2012-08-06
  • 打赏
  • 举报
回复
一个是语言 一个是对c++的封装
threenewbee 2012-08-06
  • 打赏
  • 举报
回复
WinForms中System.Windows.Forms.Form有一个虚函数叫WndProc,它可以被用来重载接收消息。

WinForms中提供的所有和Windows其他语言程序一致的标准功能,最终都是API完成的。相对来说,WinForms对Windows API的使用只是MFC的一个子集。比如说,对于公用对话框的封装,WinForms就缺少CFindReplaceDialog。关于WinForms到Win32 API的映射关系,可以看这里:http://msdn.microsoft.com/en-us/library/aa302340.aspx
不过有点老。

至于C#语法和.NET框架函数的熟悉问题,这个可能短期想突击我也无能为力了。
BrillianceRen 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

哦,那个是事件。默认情况下,Visual Studio会让事件处理函数使用和事件名相关的名字命名,但是这不是必须的。你完全可以把MainForm_Load()定义成aaa(),并且注册到事件上:
this.Load += new EventHandler(aaa);
[/Quote]

所噶, 在MSDN里查到了那些函数,还以为是关键字. 不过.Net的函数真是太多了, 咱不知道那些是C#原生的, 那些是.Net的, 更恶心的是还有外来的dll引入的, 总之乱七八糟看得头疼.
所以想尽快理清C#程序入口, 找到这个系统从什么地方开始运行, 有那些消息事件之类... 看了一下午委托之类,感觉跟MFC的消息差不多. MSDN里讲的也不详细, 串口读取的datarecive说明页一个接受触发之类的也没有, 还冒出个SerialDataReceivedEventHandler 搞得我云里雾里的...
不过咱目前不追求吧C#代码看懂,知道里边几个模块调用方式就行了...把dll移植到MFC里
threenewbee 2012-08-06
  • 打赏
  • 举报
回复
哦,那个是事件。默认情况下,Visual Studio会让事件处理函数使用和事件名相关的名字命名,但是这不是必须的。你完全可以把MainForm_Load()定义成aaa(),并且注册到事件上:
this.Load += new EventHandler(aaa);
BrillianceRen 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

http://msdn.microsoft.com/en-us/library/0xb61xs7(v=vs.80).aspx
[/Quote]

我不明白你为什么不直接提供
http://msdn.microsoft.com/zh-cn/library/0xb61xs7(v=vs.80).aspx
不过还是感谢,我在这里
http://msdn.microsoft.com/zh-cn/library/86faxx0d(v=vs.80).aspx
受益匪浅
还有个问题, System.Windows.Forms.Form.Load 和 System.Windows.Forms.Form.Closed
是什么? 为什么程序里变成MainForm_Load() 和 MainForm_Closed() MainForm_Closing()之类???
threenewbee 2012-08-05
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/en-us/library/0xb61xs7(v=vs.80).aspx
stonespace 2012-08-05
  • 打赏
  • 举报
回复
不过mfc创建view会很麻烦,不像form,直接new一个form就完事了,因为mfc的view和document有配对关系,所以需要注册模板,然后由模板创建view和document,虽然代码不是很多,但会让人觉得莫名其妙,
stonespace 2012-08-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

我现在有一套C#开发的WinCE系统, 正在分析代码, 想要把一些功能移植到我MFC的平台里, 找不到入口点
不知道Form初始化在哪, 程序入口在哪

[/Quote]

mfc的结构和winform差别很大,winform的窗体是form,在mfc里可能最接近对话框或者FormView,而mfc则多使用更灵活的view,

如果你打算使用FormView来实现c# form的功能,那么form初始化在CFormView::OnInitialUpdate里(这时候你已经可以访问document对象),或者在CFromView::OnInitDialog里,也可以在CFormView::OnCreate里,

和.net的form不同的是,mfc的view都对应有一个document对象,表示数据,CFromView和CDialog类还有一个奇异的数据映射机制,把对话框/form上面的控件,比如输入框等,直接和一个类数据变量绑定起来,这个机制有时候会比Form方便,在Form中取数据,还要对textbox里的数据进行转换,而在CFromView里你可以把一个输入框和一个int型变量帮顶起来,然后调用UpdateData方法后int变量里的值就和输入框中的内容一样了,不需要转换,
stonespace 2012-08-05
  • 打赏
  • 举报
回复
mfc的机制比.net机制更简单高效率,更接近底层,而.net的机制太复杂,封装了很多底层你没法控制,
wushuai1346 2012-08-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 2 楼 的回复:

c#哪有那些方法?根本没有。

那些方法是.net framework中的,可以给.net平台下任何语言共同使用。而.net framework比如 mef、asp.net、wpf 等等从细致到宏大的各种类库。即使是silverlight也是 .net framework的一种,只不过跟桌面版不同而已。同时除了silverlight的以外,.net frame……
[/Quote]
找Main方法啊,看看是否有Program.cs这个文件.
BrillianceRen 2012-08-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

c#哪有那些方法?根本没有。

那些方法是.net framework中的,可以给.net平台下任何语言共同使用。而.net framework比如 mef、asp.net、wpf 等等从细致到宏大的各种类库。即使是silverlight也是 .net framework的一种,只不过跟桌面版不同而已。同时除了silverlight的以外,.net framework也还有compact版的……
[/Quote]

我现在有一套C#开发的WinCE系统, 正在分析代码, 想要把一些功能移植到我MFC的平台里, 找不到入口点
不知道Form初始化在哪, 程序入口在哪
  • 打赏
  • 举报
回复
“新建一个对话框”,我去!

使用.net的目的,就是不用花精力想这些低级的编程。比这个高级100倍的编程,也早被.net代码工人都熟练掌握了。
  • 打赏
  • 举报
回复
c#哪有那些方法?根本没有。

那些方法是.net framework中的,可以给.net平台下任何语言共同使用。而.net framework比如 mef、asp.net、wpf 等等从细致到宏大的各种类库。即使是silverlight也是 .net framework的一种,只不过跟桌面版不同而已。同时除了silverlight的以外,.net framework也还有compact版的。

如果你连c#跟.net framework都没有区分,那么就在抓.net的皮毛。
BrillianceRen 2012-08-04
  • 打赏
  • 举报
回复
我顶...内容太短了

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧