搜索
bottom↓
回复: 186

从零开始学VC系列教程 二. 对话框及常用控件实验

[复制链接]

出0入0汤圆

发表于 2008-9-9 21:56:26 | 显示全部楼层 |阅读模式
从零开始学VC系列教程 二. 对话框及常用控件实验
    恭喜你,进入VC学习的第二节了.这一节是人机交互的基础.所谓人机交互,说通俗点就是与机器对话.然而我们现在的技术还不能像科幻片里一样与机器人直接说话就行了.所以,我们的操作意图还得通过文本输入,命令按钮等等来实现.
本节内容:学会对话框调用及一些常用控件的使用方法.
    学习目的:学习人机交互,为软件开发提供界面基础.
1.新建工程.参考第一节的方法新建一个工程,名字为Eg02完成后如下图

图片1 (原文件名:01.jpg)
细心的朋友一定会发现.新建的工程里还有一个对话框,ID名是IDD_ABOUTBOX这个是做什么用的呢?我们用到的软件都会有一个版权声明.通过第一章的学习,大家应该知道怎么观看这个IDD_ABOUTBOX对话框了吧.没错!双击IDD_ABOUTBOX就可以了.我们会看到如下的一个对话框

图片2 (原文件名:02.jpg)
这就是我们这个程序的关于对话框,一般用于版权声明及版本号标识.大家看到的这个对话框里有两个静态文本框和一个图像框(Picture),静态文本框我们在前一节已经介绍过了.大家可以修改一下版权所有这一行,填什么都可以,签个大名也行.完成以后你一定想看看效果,这个对话框怎么打开呢?其实VC已经为我们做好了.先按F7编译,然后按F5运行.大家可以看到程序运行了.

图片3 (原文件名:03.jpg)
单击应用程序图标,就会出现一个菜单,选最后一个[关于Eg02],关于对话框就弹出来了.
当然,这是系统为我们做好的.自己怎么在程序中调用这个对话框呢?为了演示,首先参考第一节的内容添加一个按钮,然后把按钮的ID改为IDC_BTN_ABOUTME,把标题,也就是Caption改为[关于].最终效果如下

图片4 (原文件名:04.jpg)
下面我们为按钮添加代码.相信大家一定还记得怎么进入代码吧..对了,双击[关于]按钮,在弹出的对话框中点[确定]就可以了.为了让大家更好的理解下面的操作,我们先要解释一下关于对话框的类.VC向导会为关于对话框建立一个类,大家看看下面的图

图片5 (原文件名:05.jpg)
单击标签ClassView(这里显示的是[Class…])就可以看到Eg02这个应用程序的类.第一个CAboutDlg就是关于对话框的类.CEg02Dlg对应IDD_EG02_DIALOG.中间的Ceg02App是应用程序的基础类.所以,如果要对关于对话框进行操作,就要用到类CAboutDlg,因为与此有关的函数及变量都封装在CAboutDlg中.看到这里大家可能又糊涂了,没关系,在以后的教程中,通过一些练习大家就会慢慢领会到的.这里还是先为[关于]按钮添加代码.
void CEg02Dlg::OnBtnAboutme()
{
        // TODO: Add your control notification handler code here
       
}
上面是VC为[关于]按钮添加的响应函数.我们添加代码成以下所示
void CEg02Dlg::OnBtnAboutme()
{
        // TODO: Add your control notification handler code here
        CAboutDlg ADlg;
        ADlg.DoModal();
}
一共有两句,第一句是CAboutDlg ADlg;作用是定义一个变量Adlg.第二句是ADlg.DoModal();功能是调用类CAboutDlg里的一个函数DoModal();这个函数在MSDN里的解释是Call this member function to invoke the modal dialog box and return the dialog-box result when done. This member function handles all interaction with the user while the dialog box is active. This is what makes the dialog box modal; that is, the user cannot interact with other windows until the dialog box is closed.一般我们用于显示一个对话框.其实大家看看CAboutDlg这个类下面,只有两个函数

图片6 (原文件名:06.jpg)  
DoModal()这个函数并不在这个里面.第一章我们提到过类的派生和继承.其实CAboutDlg这个类是派生于CDialog类,DoModal()这个函数是CDialog的成员函数,由于CAboutDlg是继承父类CDialog的,所以CDialog里的函数在CAboutDlg中也可以使用.
下面我们来说说几个常用控件的使用.
首先在IDD_EG02_DIALOG对话框中加入一个Edit(编辑框)控件.Edit一般用于输入输出数据文本.相当于VB里的TextBox.加入Edit控件后,编辑其属性为

图片7 (原文件名:07.jpg)
然后,我们再加一个按钮(PushButton),并编辑其属性为

图片8 (原文件名:08.jpg)
接下来,我们先说一下要实现的效果.很简单,在编辑框里输入一个文本,然后按显示,就把文本显示在静态文本框中.所以,这里要把静态文本编辑框的ID改为IDC_DISPLABEL
下面我们为[显示]按钮添加代码
void CEg02Dlg::OnBtnShow()
{
        // TODO: Add your control notification handler code here
        CString a;
        GetDlgItemText(IDC_EDIT_INPUT,a);
        SetDlgItemText(IDC_DISPLABEL,a);
}
其实不复杂,也只有三句,第一句定义一个CString类变量a 我们来说说GetDlgItemText这个函数吧.查查MSDN就知道函数原型了.
int GetDlgItemText( int nID, LPTSTR lpStr, int nMaxCount ) const;
int GetDlgItemText( int nID, CString& rString ) const;
大家看看就觉得奇怪了,怎么有两个原型啊?并且一个是传两个参数,另一个是传三个参数.在VC里面,同一个类下是可以存在多个同名函数的,具体调用哪个函数要看参数的不同.在这里我们传入了两个参数,所以VC会调用int GetDlgItemText( int nID, CString& rString ) const;这个函数.第一个函数是控件的ID号,第二个是字串.第二个传了地址,所以我们在下一句中用的a已经是获得IDC_EDIT_INPUT的文本了.运行效果如下

图片9 (原文件名:09.jpg)
下面介绍一下进度条的使用以及定时器的使用.
我们要实现的效果是进度从0到满格,然后再从0到满格,依次循环.每跳一格间隔500ms,这个时间我们用定时器来实现.
首先从控件条里拖出一个进程条到对话框,修改属性如下

图片10 (原文件名:10.jpg)
然后我们要介绍一下VC的定时器.VC里面使用定时器有多种方式,我们先介绍一种作为抛砖引玉
首先添加一个Windows消息处理器.消息这个词语可能很陌生,我们会在后面很多次说明.这里先照图做

图片11 (原文件名:11.jpg)
在类管理器里选中Ceg02Dlg这个类,然后点右键,就会弹出一个菜单,选择[Add Windows Message Handler…],接下来会弹出另一个菜单

图片12 (原文件名:12.jpg)
双击WM_TIMER然后按[确定]就可以了.大家会看到,CEg02Dlg类中多了一个函数

图13 (原文件名:13.jpg)
这个就是VC中的定时器响应函数.然后双击这个函数就进入代码了

图14 (原文件名:14.jpg)
然后我们为Timer事件添加代码.
void CEg02Dlg::OnTimer(UINT nIDEvent)
{
        // TODO: Add your message handler code here and/or call default IDC_PROGRESS
        static int nPos=0;
        ((CProgressCtrl*)(GetDlgItem(IDC_PROGRESS)))->SetPos(nPos);
        if(nPos<100) nPos+=10;
        else nPos=0;
        CDialog::OnTimer(nIDEvent);
}
首先定义一个整型的变量nPos用于记录进度条的进度值.默认时,进度条0为空,100为满格.从后的程序大家可以看到,这个变量自加到100就变为0.最难理解的就是
((CProgressCtrl*)(GetDlgItem(IDC_PROGRESS)))->SetPos(nPos);
首先, GetDlgItem(IDC_PROGRESS)这个函数用来获取IDC_PROGRESS的句柄,在VC里面引入了句柄这个词语,我们将在下一章中对消息和句柄进行详细的说明, 句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。在这里,GetDlgItem获取了窗体句柄,大家应该还记得,在VC里面,控制就看成窗体。(CProgressCtrl*)这个地方是将返回的句柄强制转换为CProgressCtrl类型,与C语言的中的强制转换是一样的.进度条的控制类是CprogressCtrl.而前面返回的是一个窗体类型,所以先要强制转换.在第一章中,我们提到过,VC中的控件都认为是窗体,在这里就体现出来了. SetPos(nPos);这个函数是类CprogressCtrl的成员函数,用来指定当前进度条的进度.最后还有一步,就是激活这个定时器.像我们的C51或AVR一样,要初始化定时器. 而void CEg02Dlg::OnTimer(UINT nIDEvent)这个函数就像我们单片机的定时器中断服务函数一样.时间到了就会自动执行.
参考上面的图,双击OnInitDialog(),就可以进入对话框初始化函数,只要添加一句就可以了.完成后如下
BOOL CEg02Dlg::OnInitDialog()
{
        CDialog::OnInitDialog();

        // Add "About..." menu item to system menu.

        // IDM_ABOUTBOX must be in the system command range.
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);

        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
                CString strAboutMenu;
                strAboutMenu.LoadString(IDS_ABOUTBOX);
                if (!strAboutMenu.IsEmpty())
                {
                        pSysMenu->AppendMenu(MF_SEPARATOR);
                        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
                }
        }

        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);                        // Set big icon
        SetIcon(m_hIcon, FALSE);                // Set small icon
       
        // TODO: Add extra initialization here
        SetTimer(0,500,NULL); //这里是添加的,别的都是自动生成的

        return TRUE;  // return TRUE  unless you set the focus to a control
}
在这里我们只添加SetTimer(0,500,NULL);其中,参数0代表定时器的ID号为0,.第二个参数500是定时器的时间,单位为ms,后面的NULL是指不要回调函数.
按F7编译后运行就可以看到运行效果了.

图15 (原文件名:15.jpg)
或许大家有个问题,为什么开始时是添加了一个WM_TIMER的消息处理器呢?我们使用SetTimer开始定时器后,如果没有回调函数,系统会在每次定时时间到后发送一个WM_TIMER消息到窗体.窗体收到这个信息后,调用OnTimer()函数进行处理.系统定义这个函数为afx_msg void OnTimer(UINT nIDEvent);可以看到是以afx_msg修饰的,这种函数会与其中一个信息关联,或者说是消息影射到这个函数.每当有消息发过来,都会执行这个函数.大家只要好好想想单片机的定时器中断就会明白的,原理一样,只是传输机制不同.
如果上面的内容你制作成功了,那么恭喜你,第二节就基本学完了.
下面我们也来说说多任务和消息机制吧.
Windows是基于消息机制的,它是一个多任务的操作系统,也就是说,同一时间内,系统会挂起多个任务.为了说明多任务,我们先来看一段单片机程序.
Void main(void)
{
        While(1)
{
        TaskA();
}
}
这个程序很简单,单片机工作后就进入while()循环了,单片机这个时候就干一件事,那就是执行任务TaskA.这样的工作总是在一个主循环内实施,一次只执行一个任务的我们称为单任务系统.单片机程序只要不引入操作系统并且由一个主循环一直执行完毕的基本都是单任务的.有些程序也是这样写的.
Void main(void)
{
        While(1)
{
        TaskA();
        TaskB();
TaskC();
}
}
这样的程序看起来似乎是有三个任务了.这三个任务是顺序执行的,也就是说,必须让A完成后,才能到B,B完成后才能到C.如果A有一个长时间的延时,系统就会在A中空等,然而B与A本来是无关的,这样空等的时间就算是浪费了.如果我们的windows也是顺序执行的就麻烦了,那时我们不仅仅会说Windows有点慢,而是说Windows像蜗牛一样在爬.如果我们让这些任务更合理的安排一下,在执行A的时候,有空就去执行B,而在B的空闲时间去执行C或者A,那么时间就节省下来了.如果时间切换够快,那么我们可以认为A,B,C三个任务在同时进行.所以,如果我们把单片机的执行时间分成若干等份,每份1ms或者更小,这种时间等份我们称为时间片,每次时间到了就换一个任务.也就是说,第一毫秒执行A,这时我们并不等A全部执行完,并记住这个断点,到了第二毫秒执行B,第三毫秒执行C,第四毫秒又执行A并从原来的断点开始执行,依次直至三个任务都完成.大家可以看到,任务A每三毫秒执行了一次.这就是多任务的模型了.
Windows其实就是这么干的.只是每次任务时间不一定是我们上面说的3ms,因为系统同一时间内可能会有很多待执行的任务,这些任务就被系统按优先级排成队,一个个取出来执行.比如我们现在打开VC,系统在加载VC,同时我们还可以移动鼠标,这些好像都是在同时进行,其实它们也是按时间片分时执行的.
现在分析一下这个工作过程吧.现在我们要打开VC,系统开始加载VC了,可以看到VC的LOGO界面,但这个时候我们还可以动一下鼠标,硬件首先会响应,并给软件发个通知,而软件这个时候可能还没有轮到鼠标程序的执行,怎么办呢?系统会先把这个鼠标操作保存起来,轮到鼠标时间片时再来处理鼠标操作.大家可能觉得,这样鼠标操作不是滞后了吗?确实是这样的,但这个滞后时间是很短的,我们基本不会察觉出来.
我们来看看消息的定义.
消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉。一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向Windows发出一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。
消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。
综合前面的分析,消息就好理解了,鼠标动一下会产生一个事件,这个事件必须要告诉系统啊,怎么告诉系统呢?Windows把这个定义为Message也就是消息,所以,消息可以认为是一个操作记号,记录上一步所发生的或者说是下一步所要处理的事件.系统为消息安排了一个队列,里面可以存放很多个消息,我们称为消息队列.有键盘操作时,把键盘操作放到消息队列里面,相当于做一个记号,我们动了键盘,有鼠标操作时,把鼠标操作放到消息队列,也便记住我们在键盘后还动了鼠标,系统就把这些东西一个个按时间取出来执行.在Windows里面,鼠标消息可以有几种,例如单击落了左键,系统会产生一个消息为WM_LBUTTONDOWN如果我们移动了鼠标,就像产生一个消息为WM_MOUSEMOVE消息入队后,系统会依次处理.当然,我们这样的解释虽然容易懂,但不是非常专业,并且Windows内部处理消息也比这复杂多了,但基本原理就是这样的了,并且,我们在进行操作时,并不用关心Windows的底层是怎么处理这些事件的,除非我们的操作真的让Windows生气了,就必须去查查出什么问题了.
说了这么多,消息可能还是一个十分飘渺的概念,倒底要怎么用呢?我们来举个例子说明一下.给系统发消息一般会用到两个函数,一个是SendMessage,另一个是PostMessage,这两个是有点区别的,具体区别作为这次的作品,大家去网上查查.例如我们要退出当前的应用程序,最简单的方法当然是按一下关闭的那个红X,如果我们要自己让程序退出,可以给系统发一个消息,其实那个关闭程序的红X也是这么干的.为了演示,首先在上次的对话框中加一个按钮,修改标题也就是Caption为”关闭程序”,ID号改为IDC_QUIT_ME双击为按钮添加以下代码.
PostMessage(WM_CLOSE);
编译运行试试,如果没有写错代码就可以用那个按钮退出程序了.
这一节也就写到这里了,可以大家还是有点糊涂,慢慢体会一下就好了.还是不明白可以来这里提问.
下面是整个工程及图片的压缩包
工程及图片压缩包ourdev_410248.rar(文件大小:1.15M) (原文件名:VC2.rar)

出0入0汤圆

发表于 2008-9-9 22:13:37 | 显示全部楼层
从很早就开始想学VC了,可是一直都是看了看又放,偶尔看了楼主的贴子,就决定跟着一起好好学习一下,希望楼主能坚持住,我也能坚持住。
今天把楼主第一篇教程试了一下,了解了一下控件,虽然在别人看来是比较弱,可是谁都有开始学习的过程,希望自己也能用VC写出自己想要的东西……

出0入0汤圆

发表于 2008-9-9 22:17:17 | 显示全部楼层
呵呵 顶楼主 要把你的这些教程都下载下来 呵呵希望继续坚持

出0入0汤圆

 楼主| 发表于 2008-9-9 22:19:16 | 显示全部楼层
第一章的地址
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=1455135&bbs_page_no=1&bbs_id=1000

出0入0汤圆

发表于 2008-9-9 22:22:01 | 显示全部楼层
先顶后看!

出0入0汤圆

发表于 2008-9-9 22:28:43 | 显示全部楼层
楼主辛苦了。谢谢。
此贴又会被置酷,可惜没抢到沙发。此广告位出租。哈哈。

出0入0汤圆

发表于 2008-9-9 22:30:11 | 显示全部楼层
建议楼主将签名档加上VC系列教程的链接,这样大家找起来会比较方便。

出0入22汤圆

发表于 2008-9-9 22:43:46 | 显示全部楼层
谢谢。

出0入0汤圆

发表于 2008-9-9 22:50:44 | 显示全部楼层
呵呵,好啊,终于等到了,我决定跟差着bqmcu 百强电子楼主走的了。谢谢!

出0入0汤圆

 楼主| 发表于 2008-9-9 23:01:15 | 显示全部楼层
谢谢8楼及大家支持。
我网名是飞雪浪子而不是百强电子,可能注册的时候填错了,本来是应该填在签名档里面的。

出0入0汤圆

 楼主| 发表于 2008-9-9 23:02:56 | 显示全部楼层
回6楼:
签名档里好像不能填地址链接啊?我会在回帖中填写好以前发布过的章节的地址。多谢支持

出0入0汤圆

发表于 2008-9-9 23:06:01 | 显示全部楼层
最近也在努力学习VC了,哎~以前没有怎么学,现在补上

出0入90汤圆

发表于 2008-9-9 23:29:47 | 显示全部楼层
楼主太厉害了!!!!!!!这么晚了还坚持发第2章,先顶了,明天再学!!!!

出0入0汤圆

发表于 2008-9-10 00:30:06 | 显示全部楼层
浪子油菜啊!
继续支持,继续学习。

出0入0汤圆

发表于 2008-9-10 08:15:09 | 显示全部楼层
玩了,都打到这了,估计躺地板的份都没了。
顶!

出0入0汤圆

发表于 2008-9-10 08:28:46 | 显示全部楼层
学习再学习...

出0入0汤圆

发表于 2008-9-10 08:44:25 | 显示全部楼层
赞下楼主,顶下楼主.

出0入0汤圆

 楼主| 发表于 2008-9-10 12:20:29 | 显示全部楼层
看来自己的帖还要自己顶才行啊。。
第三章串口通信及消息 下星期三发布。

出0入0汤圆

发表于 2008-9-10 23:40:52 | 显示全部楼层
坚持学习

出0入0汤圆

发表于 2008-9-11 00:02:09 | 显示全部楼层
睡觉前顶一下,期待出第三

出0入0汤圆

发表于 2008-9-11 08:08:24 | 显示全部楼层
楼主辛苦了

出0入0汤圆

发表于 2008-9-11 08:13:25 | 显示全部楼层
好啊,补课!

出0入0汤圆

发表于 2008-9-11 08:39:08 | 显示全部楼层
要顶啊。跟着楼主走
要是把相关键接放在顶楼就更好了。

出0入0汤圆

发表于 2008-9-11 08:43:00 | 显示全部楼层
狠狠的顶一下,站长是不是又该考虑开VC专栏了呀。

出0入0汤圆

发表于 2008-9-11 08:45:29 | 显示全部楼层
占位 学习。

出0入0汤圆

发表于 2008-9-11 09:57:11 | 显示全部楼层
必顶~!

出0入0汤圆

发表于 2008-9-11 11:06:42 | 显示全部楼层
不顶不行啊

出0入0汤圆

发表于 2008-9-11 12:08:42 | 显示全部楼层
mark!!

出0入0汤圆

发表于 2008-9-11 12:54:27 | 显示全部楼层
好!!!!
楼主坚持写完啊!!
建议在每一贴里都把别的章节链接发出来好方便我们查找啊!

出0入46汤圆

发表于 2008-9-11 17:53:11 | 显示全部楼层
不顶不行啊!

出0入0汤圆

发表于 2008-9-11 21:38:03 | 显示全部楼层
这个要顶才行呀,

出0入0汤圆

发表于 2008-9-11 23:38:04 | 显示全部楼层
第二节学习完毕,期待第三节

出0入0汤圆

发表于 2008-9-12 09:57:52 | 显示全部楼层
不错

出0入0汤圆

发表于 2008-9-12 11:19:53 | 显示全部楼层
太谢谢搂主了,几次想学这个VC,终究不得其门,无果而终。现在楼主劳神费力,手把手教,太谢谢了。最头痛的就是那些一大串的宏。

出0入0汤圆

发表于 2008-9-12 11:20:20 | 显示全部楼层
不错,我都跟到第二篇了,,,
继续学习,跟定你了!

出0入0汤圆

发表于 2008-9-13 11:23:13 | 显示全部楼层
不错

出0入0汤圆

发表于 2008-9-13 11:37:34 | 显示全部楼层
我也跟着来咯。问哈大家,那个ID可以自己设置么,它是不是就只是一个名称什么的。

出0入0汤圆

 楼主| 发表于 2008-9-13 12:22:53 | 显示全部楼层
回36楼
ID是可以自己设置的。只是一个名字而已。在VC里面,这个ID会在Resouce.h文件里面自动被定义成一个十六位的数,这个ID号用于取得对窗体的访问句柄。

出0入0汤圆

发表于 2008-9-13 12:42:06 | 显示全部楼层
不错,学过点VC的控件,也做过计算器.不过好久没有动手做了,也忘了差不多了,主要是现在在学单片机,没有时间搞这些,有时间了要再看看..........做些小东西了解一下VC,还是很有意思的.

出0入0汤圆

发表于 2008-9-13 14:52:37 | 显示全部楼层
感谢楼主的教程,已完成第二小节的学习!
学习中发现定时器只要调试OK就运行,感应有点点不习惯,稍稍改了一下,用C语言增加了一全局变量tt,只有在确定点击“显示”时才开启定时器(使用单片机的习惯比较严重),不知更改后会不会产生其它负面影响,功能已经实现!


(原文件名:VC学习.gif)

出0入0汤圆

 楼主| 发表于 2008-9-13 18:41:27 | 显示全部楼层
回39楼:
开定时器的函数在InitDialog函数里面,SetTimer(0,500,NULL);这个地方是开定时器的,你可以把这句放到按钮的响应函数里面就行了。另外,这里也介绍一下定时器初始化函数。SetTimer的第一个参数是0.这个是定时器的ID号,因为可以开多了定时器,所以用ID号区别开来。第二个参数500是定时时间,以ms为单位。第三个是NULL,这个参数是用来指定回调函数,这里我们没用,所以填NULL。我们第二章的定时器响应函数是这样的。CEG01Dlg::OnTimer(UINT nIDEvent){};这里有一个参数是nIDEvent,系统会自动传这个参数,并且,这就是定时器ID。在VC中只有一个响应函数,所有的定时器时间到了都会用这个函数响应,可以用switch(nIDEvent){}来分别查询是哪个定时器的时间到了。这样就可以区别开来,分别响应不同ID的定时器。

出0入0汤圆

发表于 2008-9-13 20:54:17 | 显示全部楼层
谢谢楼主!辛苦了!

出0入0汤圆

发表于 2008-9-13 23:15:17 | 显示全部楼层
学习了

出0入0汤圆

发表于 2009-4-9 22:38:06 | 显示全部楼层
好东西,自己刚刚做完vc的一个小项目
早前没看到这个教程,不然能节省不少时间哦,呵呵
做个记号,备用

出0入0汤圆

发表于 2009-4-9 22:52:49 | 显示全部楼层
很好

出0入0汤圆

发表于 2009-4-9 23:29:05 | 显示全部楼层
好东西要留下记号

出0入0汤圆

发表于 2009-6-8 16:17:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-15 19:42:48 | 显示全部楼层
不mark不行了~~

出0入0汤圆

发表于 2009-10-15 20:28:08 | 显示全部楼层
报名,跟着学

出0入0汤圆

发表于 2009-10-23 13:47:08 | 显示全部楼层
第三期课程呢?

出0入0汤圆

发表于 2009-10-24 09:04:29 | 显示全部楼层
我要好好。

出0入0汤圆

发表于 2009-10-24 11:51:13 | 显示全部楼层

出0入0汤圆

发表于 2009-12-18 15:12:45 | 显示全部楼层
课程三呢?

出0入0汤圆

发表于 2009-12-18 15:38:37 | 显示全部楼层
学习

出0入0汤圆

发表于 2009-12-21 18:46:00 | 显示全部楼层
我用VC2008.按楼主的方法,我找不到Windows消息处理器,怎么回事?有谁能指点指点!

出0入0汤圆

发表于 2009-12-22 10:06:30 | 显示全部楼层
呵呵呵,终于弄懂了,直接添加就可以了,不需要什么右键!呵呵,参考楼主的课程,真有很大的收获!
  再次感谢楼主!现在开始第三课的旅程了!谁想和一起来!go!

出0入0汤圆

发表于 2010-2-28 16:00:57 | 显示全部楼层
mark

出0入296汤圆

发表于 2010-2-28 16:18:52 | 显示全部楼层
以下蓝色文字由版主:Gorgon Meducer 于:2010-02-28,16:18:52 加入。
<font color=black>请发贴人注意:
本贴放在这分区不合适,即将移走
原来分区:[9999]AVR (原ourAVR.com) 技术论坛
即将移去的分区:[1036]上位机软件开发(Delphi,C++等)
移动执行时间:自本贴发表0小时后

任何的疑问或咨询,请可随时联系站长。谢谢你的支持!
</font>

出0入0汤圆

发表于 2010-3-1 22:47:02 | 显示全部楼层
Mark!

出0入0汤圆

发表于 2010-3-1 22:47:31 | 显示全部楼层
Mark!

出0入0汤圆

发表于 2010-3-2 21:30:09 | 显示全部楼层
看来学VC的人挺多的嘛!学习中!

出0入0汤圆

发表于 2010-3-5 16:22:08 | 显示全部楼层
标记一下。

出0入0汤圆

发表于 2010-3-7 20:42:28 | 显示全部楼层
都不错啊!

出0入0汤圆

发表于 2010-3-10 15:21:10 | 显示全部楼层
受益匪浅,谢谢楼主!

出0入0汤圆

发表于 2010-3-10 16:09:30 | 显示全部楼层
课程三呢?四呢?……

出0入0汤圆

发表于 2010-3-17 09:30:06 | 显示全部楼层
正在学习中,多谢楼主

出0入0汤圆

发表于 2010-4-9 23:00:49 | 显示全部楼层
谢谢楼主!!!

出0入0汤圆

发表于 2010-4-9 23:03:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-15 13:07:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-17 21:59:15 | 显示全部楼层
多谢楼主的无私和教导

出0入0汤圆

发表于 2010-5-5 22:03:08 | 显示全部楼层
支持

出0入0汤圆

发表于 2010-5-14 18:18:36 | 显示全部楼层
期待 第三 第四课  一定要把 VC 学好

出0入0汤圆

发表于 2010-5-29 16:57:48 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-6-2 12:56:07 | 显示全部楼层
希望   通过版主的    指引 让我  入门 VC++ 6.0

出0入0汤圆

发表于 2010-6-2 21:47:59 | 显示全部楼层
谢谢 楼主  !!! 期待你后续 课程!! 强烈期待!!!!!!

出0入0汤圆

发表于 2010-7-22 10:46:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-22 12:45:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-28 21:16:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-3 16:52:20 | 显示全部楼层
mark~~~~

出0入0汤圆

发表于 2010-8-13 21:07:37 | 显示全部楼层
很好的教材

出0入0汤圆

发表于 2010-8-15 16:08:28 | 显示全部楼层
mark!!

出0入0汤圆

发表于 2010-8-18 22:47:00 | 显示全部楼层
很好啊
我也学过CV 但是那书上说得没有这里的那么有针对性,这里的读起来亲切一点。没有我们老师说的那样生硬、教条!

继续关注...

出0入0汤圆

发表于 2010-10-1 21:33:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-7 19:59:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-4 23:26:59 | 显示全部楼层
hehe ,我也MARK下

出0入0汤圆

 楼主| 发表于 2010-11-6 22:30:00 | 显示全部楼层
我写的一点东西,能帮到大家,真的很高兴.关于<从零开始学VC>,其实我写过五章就没有续了,因为工作上的忙碌,说来还真对不起广大爱好者.另外也是怕误人子弟,所以我只能说,从一条不是非常正确的道路,引一些亲入门,而后就不敢再高谈了.为了方便大家交流,我再申请了一个QQ号,专用于同大家交流VC的一些心得,为抛砖引玉之用,万望高手不要见笑.此外,忙完这一段时间后,我还是会应当初承诺,完成这一教程的后面十几个章节.
QQ:1114286165

出0入0汤圆

发表于 2010-11-10 11:26:35 | 显示全部楼层
期待后续!

出0入0汤圆

发表于 2010-12-4 15:03:33 | 显示全部楼层
顶,受益良多,谢谢LZ

出0入0汤圆

发表于 2010-12-4 16:00:19 | 显示全部楼层
虚心学习。。。

出0入0汤圆

发表于 2010-12-4 18:28:46 | 显示全部楼层
几号。

出0入0汤圆

发表于 2010-12-4 19:49:10 | 显示全部楼层
跟楼主学习了

出0入0汤圆

发表于 2010-12-4 20:23:32 | 显示全部楼层
太谢谢楼主的无私奉献。先收藏,慢慢有空研究。期待后续。

出0入0汤圆

发表于 2010-12-4 23:08:51 | 显示全部楼层
马渴

出0入0汤圆

发表于 2010-12-14 15:00:42 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-12-16 08:48:21 | 显示全部楼层
太好了!

出0入0汤圆

发表于 2010-12-16 09:49:43 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-12-16 09:55:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-16 17:10:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-16 23:30:48 | 显示全部楼层
谢谢 楼主

出0入24汤圆

发表于 2010-12-17 08:43:08 | 显示全部楼层
学习了
感谢楼主!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 06:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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