接着,保存记事本中的MyActiveX.rc。这时,Visual Studio将报告说MyActiveX.rc被外部程序修改,点击“Yes”重载这个资源文件。最后,选中“解决方案浏览器”中的“ProcessingProgressBar.gaf”,在它的属性对话框中,将“Relative Path”修改为“ProcessingProgressBar.gif”
添加对话框显示进度条
现在,我们将添加一个对话框用以显示进度条:
1.在资源视图中,右键点击对话框节点,在上下文菜单中选择“Insert Dialog”创建一个新的默认对话框。
2.删除对话框模板上我们不需要的“OK”和“Cancel”按钮,然后将对话框的尺寸调整为230 x 40。
3.然后,我们对对话框的属性做一些必要的修改,使它更适合于用来显示进度条:Border – None, Style – Child, System Menu – False, Visible – True。
4.将对话框的ID修改为IDD_MAINDIALOG。
5.在对话框上添加一个图像控件(Picture Control)。将图像控件的尺寸调整为200 x 20,然后将其ID修改为IDC_PROGRESSBAR。同时,将其颜色属性修改为白色(White)。
6.最后,我们需要为对话框资源创建一个新的类。在对话框资源上右键单击,在弹出的菜单中选择“Add Class”,在接着出现的“MFC类向导”对话框中,我们将新的类命名为CMainDialog,基类设置为CDialog,点击“Finish”完成类的创建。
图3 创建新的对话框类CMainDialog
现在,我们来为这个新创建的对话框类添加成员变量。成员变量m_MainDialog对应于类CMainDialog,而m_ProgressBar对应于我们刚刚添加的进度条显示控件。
1.为类CMyActiveXCtrl添加成员变量m_MainDialog。选择类视图,在类CMyActiveXCtrl的节点上点击右键,在上下文菜单中选择“Add”->“ Add Variable”,然后输入CMainDialog作为变量类型,输入m_MainDialog作为变量名。
2.跟上面的步骤一样,我们为类CMainDialog添加成员变量m_ProgressBar。输入CPictureEx作为变量类型,m_ProgressBar作为变量名。同时,选中“Control variable”复选框,使其成为一个控件变量。在“Control ID”下拉列表中,确认控件的ID为“IDC_PROGRESSBAR”。具体设置如下图4所示:
图4 添加成员变量m_ProgressBar
添加代码实现进度条的显示
现在,我们将添加代码实现主对话框和进度条控件的显示。
1.在类视图中,选中类CMyActiveXCtrl。然后在其属性页中选中消息(Messages)图标,在消息列表中,选择“WM_CREATE”消息,然后选择“<Add> OnCreate”为WM_CREATE消息创建一个消息响应函数OnCreate。这样,向导就会为我们在类CMyActiveXCtrl中创建一个消息响应函数OnCreate。
2.编辑MyActiveXCtrl.cpp文件,将下列代码添加到我们刚刚创建的OnCreate函数中。这段代码将负责创建主对话框:
m_MainDialog.Create(IDD_MAINDIALOG, this);
然后,将下列代码添加到绘制函数OnDraw中,以实现对主对话框大小尺寸和背景的修改:
m_MainDialog.MoveWindow(rcBounds, TRUE);
CBrush brBackGnd(TranslateColor(AmbientBackColor()));
pdc->FillRect(rcBounds, &brBackGnd);
3.同样的,我们为主对话框类CMainDialog添加创建消息WM_CREATE的消息响应函数OnCreate。
4.编辑MainDialog.cpp文件,将下列代码添加到函数OnCreate中,以实现进度条GIF图像的加载和绘制:
if(m_ProgressBar.Load(MAKEINTRESOURCE(IDR_PROGRESSBAR),_T("GIF")))
m_ProgressBar.Draw();
最后,确认我们的配置文件是Release版本,构建生成MyActiveX整个解决方案。这样,我们就完成了整个ActiveX控件的创建。