面向对象编程422Word格式.docx
- 文档编号:14499095
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:15
- 大小:138.21KB
面向对象编程422Word格式.docx
《面向对象编程422Word格式.docx》由会员分享,可在线阅读,更多相关《面向对象编程422Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
尝试在每个子窗口中绘制特定颜色的矩形
♦在子窗口的窗口过程函数的刷新处理消息中增添处理代码;
♦用GetWindowLong函数取出子窗口ID;
♦根据子窗口ID设定子窗口内需要显示的信息(使用wsprintf函数组织待显示的字符串)
♦尝试在子窗口中绘制特定颜色的矩形(练习使用Rectangle函数)
3.跟踪消息传递过程
♦在Childwin的主窗口过程函数的WM_CREATE、WM_PAINT、WM_COMMAND、WM_LBUTTONDOWN处设置断点
♦在子窗口的WM_CREATE、WM_PAINT、WM_CHILDWIN、WM_LBUTTONDOWN处设置断点
♦运行程序,查看各断点的响应过程,以此理解消息传递的次序
4.设计、实现一个软键盘
用子窗口实现一个软键盘(在窗口的客户区用子窗口绘制一个仿真的键盘),鼠标点击每个子窗口,可输入不同的字符。
将输入的字符显示到屏幕上。
5.在自己的工作目录中建立新工程用于控件测试〔可以将Easywin工程的easywin.c拷贝到新工程的目录中,修改文件名为ctltest.cpp(后缀名改为.cpp),编译、链接并使程序正常工作(包括修正编译错误)〕。
6.*用Button完成4*所要求的软键盘实现。
比较与原有实现的不同之处。
7.创建各种类型的控件子窗口,包括static、edit、listbox、combobox、button、scrollbar等;
在主窗口的窗口过程函数中增加相应的消息处理实现主窗口与子窗口的通信(可尝试设置控件的标题/内容,获取控件的标题/内容以及在控件有点击等操作时在主窗口给出提示)。
8.同步骤5,新建用于资源测试的工程。
9.增加新的资源:
光标、图标,并正确显示
♦用资源编辑器编辑一个光标(彩色),注意删除资源中不需要的image类型,否则显示光标可能不正确。
♦为光标设定热点(hotspot)
♦用资源编辑器编辑一个图标
♦修改注册窗口类的代码,使程序能正常使用自定义的光标和图标
♦参照课本(或MSDN)中的DrawIcon函数,在WM_PAINT消息中增加处理,在窗口客户区中显示自定义的光标及图标。
♦创建一个另外光标供后续实验步骤使用
10.增加菜单
♦菜单中建立一个菜单项命令以修改窗口使用的光标,可命名为“ChangeCursor”,对应的ID假设为ID_CHANGECURSOR
♦修改注册窗口类的代码,使程序运行时能正确载入菜单
♦换一种方式,通过修改创建窗口的代码,使菜单能正确载入
11.增加菜单消息响应代码
♦增加WM_COMMAND的消息处理
♦参照第五章菜单示例代码中的处理方式,响应菜单命令
♦对ID_CHANGECURSOR命令的响应为:
改变窗口使用的光标,可以使用SetClassLong(hwnd,GCL_HCURSOR,
(LONG)LoadCursor((HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),
MAKEINTRESOURCE(IDC_CURSOR2)));
12.处理鼠标右键,增加快捷菜单处理
♦右键发出的菜单命令同样是通过WM_COMMAND消息响应的,增加快捷菜单之后,程序应该能通过主菜单或快捷菜单两种方式发出同样的命令
13.增加菜单快捷键的定义
♦修改资源,增加快捷键,使快捷键对应到某一菜单命令
♦修改消息循环,使程序能够处理快捷菜单
♦测试快捷键的按键响应情况
2实验过程及结果
2.1创建工程
点击文件,选择新建项目,选择win32项目,改名称和解决方案名字。
并进行设置成空项目,将示例程序childwin.c改为childwin.cpp,拷贝到所建工程目录,添加为源文件。
2.2问题及解决方案
(1):
调试程序,将wcMain.hbrBackground=GetStockObject(WHITE_BRUSH);
wcChild.hbrBackground=GetStockObject(LTGRAY_BRUSH);
这两句代码的等号后面加(HBRUSH)强制涂刷。
在项目——属性——字符集将Unicode字符集改为多字节字符集,编译,成功出现子窗口程序。
(2):
以子窗口程序为基础,写出软键盘程序。
定义行数和列数为4和7,在WM_SIZE函数中改变子窗口大小和位置。
具体代码为
caseWM_SIZE:
nXBox=(LOWORD(lParam))/COL_NUM;
nYBox=(2*HIWORD(lParam)/5)/ROW_NUM;
//主窗口大小改变时,重新确定各子窗口在主窗口客户区的位置
for(x=0;
x<
COL_NUM;
x++)
for(y=0;
y<
ROW_NUM;
y++)
{
MoveWindow(hChildWnd[x][y],(x*nXBox),(y*nYBox+HIWORD(lParam)*3/5),nXBox,nYBox,TRUE);
}
return0;
(3)定义变量number和数组a[100],用getwindowlong获得子窗口id,并将子窗口id加65变为大写字母的ASCII码,用wsprint赋给数组,用drawtext显示在子窗口上。
charnumber;
TCHARa[100];
number=GetWindowLong(hWnd,GWL_ID);
wsprintf(String,TEXT("
%c"
),number+65);
rect.top=rect.bottom-60;
DrawText(hdc,String,1,&
rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
(4)定义红色笔刷,用selectobject调用用该笔刷,在子窗口上用rectangle函数绘制红色矩形,具体代码为
HBRUSHhBrush=CreateSolidBrush(RGB(255,50,0));
HBRUSHhOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
Rectangle(hdc,rect.right/4,rect.bottom/4,3*(rect.right)/4,3*(rect.bottom)/4);
SelectObject(hdc,hOldBrush);
DeleteObject(hBrush);
(5)用WM_COMMAND将子窗口被命中消息送给主窗口,用WM_PAINT函数绘制主窗口,定义变量number、数组a[50],将子窗口id赋给变量number,将number加65得到大写字母的ASCII码,赋给数组a[50],用DrawText函数将数组a显示出来。
具体代码如下:
caseWM_COMMAND:
if(!
(LOWORD(wParam)==nChildWin_ID))
{
SendMessage((HWND)hChildWnd[nCol][nRow],WM_CHILDWIN,0,0L);
nChildWin_ID=LOWORD(wParam);
nCol=nChildWin_ID>
>
30;
nRow=(nChildWin_ID>
30)?
(nChildWin_ID-30):
nChildWin_ID;
}
InvalidateRect(hWnd,NULL,TRUE);
caseWM_PAINT:
{
hdc=BeginPaint(hWnd,&
ps);
GetClientRect(hWnd,&
rect);
intnumber=nChildWin_ID;
staticintn=0;
staticchara[50];
a[n]=number+65;
n++;
DrawText(hdc,a,
-1,&
EndPaint(hWnd,&
return0;
}
软键盘如图:
(6):
创建工程项目控件,将示例程序eassywin.c改为ctltest.cpp并拷贝到所建工程所在文件夹中,将其添加为源文件,在项目——属性——链接器——输入中加入winmm.lib库,编译成功.在WM_CREATE函数创建控件类型,对控件的标签、风格、起始位置、高度和宽度进行定义,控件向父窗口传送消息需要用WM_COMMANND,来自控件的lParam等于1时进行控件的传送。
(7)右键点击源文件,添加资源cursor,绘制光标并保存。
(8)11.新建资源munu,将菜单写为changecursor,点击后在属性处将此id改变为ID_CHANGECURSOR,菜单的lparam等于0,用WM_COMMAND消息将菜单传递给父窗口,caseID_CHANGECURSOR时进行光标的改变。
将wcMain.lpszMenuName=”NULL”改为菜单IDR_MENU,即添加菜单。
3实验总结
在做实验三的这两个周,我深刻的体会到要想写出一个程序并运行成功是多么的不容易。
根据实例程序childwin,运用子窗口的方法,通过定义数组在子窗口显示出大写字母和在父窗口显示出被命中的字母,这些老师都已经提示过,但真正去做却到处都在出错,不停的调试、修改、向同学请教,到现在都没做出最理想的软键盘程序。
老师说过学习没有捷径,我以后会在学习编程上投入更多的时间,希望能在学期结束时能对编程这门课有更深一步的认识。
附录关键代码
软键盘代码:
/*******************************************************************
程序:
ChildWin
文件:
ChildWin.c
功能:
子窗口演示程序——命中测试
********************************************************************/
#include<
windows.h>
windowsx.h>
#defineROW_NUM4//行数
#defineCOL_NUM7//列数
#defineWM_CHILDWINWM_USER+1//主窗口通知子窗口的自定义消息
BOOLInitWindow(HINSTANCEhInstance,intnCmdShow);
//主窗口函数原型
LRESULTCALLBACKMainWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam);
//子窗口函数原型
LRESULTCALLBACKChildWndProc(HWNDhWnd,UI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程 422
![提示](https://static.bdocx.com/images/bang_tan.gif)