通过前面的学习,我们已经能够创建一个属于自己的窗口,一个温暖的小屋,接下来该怎么布置,让她充满生机、透出灵气与和谐,自然的内在流露呢?
控件是组装好的一些常用Windows基本组件,就像我们房间里各种家具、各种电器,我们并不需要自己去制作,只要会精挑细选,准有最适合自己的一款;
在VC中系统已经准备好了各种控件,比如各种按钮、标签、列表框、滚动条、工具栏等等都是一些常用的控件,程序中的控件将作为一个构成程序的对象,可以对它进行一些设计和修饰;
控件是基于对话框的,也就是控件一般放在对话框当中,对话框(Dialog)是一种资源,它的定义放在资源文件里,
当打开项目控制台的“资源”标签中的“Dialog”项,就可以看到文件区的一个对话框,同时右边还有一个工具箱,里面放了各种控件,使用时先选中,再画到对话框里头就可以了;
下面我们来学习如何在资源文件中创建一个对话框,并学习最基本的控件——按钮的使用方法;
1、启动VC,新建一个名为Dialog的Win32 Application工程,再新建一个相同名称的头文件和源程序文件,在头文件中输入函数的申明,在源程序中输入窗口框架代码;
2、在头文件中输入函数申明,再加入资源中各个对象的标识符申明,代码如下:
BOOL APIENTRY DlgWndProc(HWND,UINT,WPARAM,LPARAM);
//对话框的消息处理过程
HWND hWndDlg;//对话框窗口的标识句柄
BOOL btxtRed,btxtBlue;//文本的颜色布尔值
#define ID_RED 301
#define ID_BLUE 302//两个颜色按钮标识符
3、用记事本新建一个相同文件名的资源文件Dialog.rc输入对话框的定义:
#include "Dialog.h"
#include "afxres.h"//还需要这个头文件
// 定义一个对话框资源
COLORBOX DIALOGEX 5, 28, 162, 85//定义对话框的标识符和位置、大小
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU//对话框风格
CAPTION "颜色对话框" //对话框标题
FONT 14, "仿宋"//文本字体
BEGIN
PUSHBUTTON "红色",ID_RED,16,61,50,14//按钮的位置、大小
PUSHBUTTON "蓝色",ID_BLUE,77,61,50,14
END
保存并关闭文件,使用工程菜单中的“添加工程”命令将资源文件Dialog.rc加入到工程中;
4、接下来加入主窗口的消息处理过程,我们设定在单击鼠标左键时调出对话框,代码如下:
LRESULT APIENTRY MainWndProc(
HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;//用于输出文本
switch(message)
{
case WM_PAINT: //输出一行提示
hdc=BeginPaint(hWnd,&ps);
if(btxtRed)
SetTextColor(hdc,RGB(255,0,0));//红色
if(btxtBlue)
SetTextColor(hdc,RGB(0,0,255));//蓝色
TextOut(hdc,20,20,"单击鼠标左键调出对话框",lstrlen("单击鼠标左键调出对话框"));
EndPaint(hWnd,&ps);
break;
case WM_LBUTTONDOWN://左键按下了
DialogBox(hInst,"COLORBOX",hWnd,(DLGPROC)DlgWndProc);
//调用创建对话框的函数
InvalidateRect(hWnd,NULL,TRUE);//主窗口的提示更新一下
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd,message,wParam,lParam));
}
return (0);
}
4、对话框本身也是一个窗口,有自己的标题栏和框架,它也有自己的消息处理过程函数,代码如下:
//对话框消息处理过程
BOOL APIENTRY DlgWndProc(
HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return(TRUE);//要求创建对话框
case WM_COMMAND://对话框的按钮消息
switch(LOWORD(wParam))
{
case ID_RED://单击“红色”按钮
btxtRed=TRUE;//红色为真
btxtBlue=FALSE;//蓝色为假
EndDialog(hDlg,FALSE);//退出对话框
break;
case ID_BLUE://单击“蓝色”按钮
btxtBlue=TRUE;
btxtRed=FALSE;
EndDialog(hDlg,FALSE);//结束模式对话框
break;
case WM_DESTROY://退出对话框
EndDialog(hDlg,FALSE);
break;
return (TRUE);
}
break;
}
return(FALSE);
}
保存一下文件
对话框当中也可以放置其他的控件对象,我们可以在里面绘制两个图片框,然后把图片框“属性”中的“类型”设为“Bitmap”,再在“图像”中选一个图片资源,从而加入图片,更多更详细的操作我们将会在MFC编程中学习;
本节学习了在用户区输出文字的代码设计,如果你成功地完成了练习,有关Windows编程基础的学习顺利结束,我们已步入视窗程序设计的广阔天地。