下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Windows 界面设计:拉帘按钮设计大家一定都用过Oicq,是不是觉得里面的拉帘按钮很炫,就是当我们点击好友,陌生人或黑名单时所需的内容就会自动出现在主窗口中,其中按钮有一种被拉起或拉下的感觉。现在我就叫大家作这种特效。第一:创建启动Visual C+ =New Project => MFC AppWizard(exe) 假定AppName为Oicq在Step 1中选SDI,在Step 4中不选tool bar,status bar,printing选项,因为用不着。其余各步均按默认选项,创建了一个标准的SDI模板。第二:设计初始大小和窗口风格在CMainFrame:PreC
2、reateWindow(CREATESTRUCT& cs)函数中加如下语句cs.style=WS_OVERLAPPEDWINDOW;/标准窗口类型cs.lpszName=_T("QQ"); /标题cs.hMenu=NULL; /取消菜单cs.cx=100;
3、160; /初始宽100pixelscs.cy=700; /初始长700pixels真么样,有点样子了吧,这只是刚开始,好戏还在后头,慢慢来。第三:添加按钮在COicqView中加入三个Button变量CButton myButton1;C
4、Button myButton2;CButton myButton3;在COicqView中添加消息函数OnCreate(LPCREATESTRUCT lpCreateStruct),添加方法不在详述,利用ClassWizard。以后的消息函数均由ClassWizard添加。在OnCreate中加入下列语句 myButton1.Create(_T("好友"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(0,0,100,20),this,IDC_BUTTON_GOODFRIEND);/创建好友按钮myButton2.Create(_T(&
5、quot;陌生人"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(0,20,100,40),this,IDC_BUTTON_STRANGER);/创建陌生人按钮myButton3.Create(_T("黑名单"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(0,40,100,60),this,IDC_BUTTON_BLACKLIST);/创建黑名单按钮记住在Resource.h中定义#define IDC_BUTTON_GOODFRIEND 150#define IDC_BUTTON_ST
6、RANGER 151#define IDC_BUTTON_BLACKLIST 152下面加入按钮消息映射,在COicqView中加入三个函数GoodFriend(),Stranger(),BlackList(),分别处理单击三个按钮的消息。afx_msg void GoodFriend();afx_msg void BlackList();afx_msg void Stranger();在OicqView.cpp中加映射 ON_BN_CLICKED(IDC_BUTTON_GOODFRIEND, GoodFriend)ON_BN_CLICKED(IDC_BUTTON_STRANGER, Stra
7、nger)ON_BN_CLICKED(IDC_BUTTON_BLACKLIST, BlackList)注意添加位置,在BEGIN_MESSAGE_MAP(COicqView, CView)和END_MESSAGE_MAP()之间。第四:准备移动这一步是关键的一步,它为以后的工作打好基础,在我看来这是非常重要的,要想清楚以后的需要。1.添加相关宏定义到OicqView.h#define UP 1 /定义按钮状态#define DOWN 22.添加状态变量int GoodFriendState;int BlackL
8、istState;int StrangerState;3.添加三个CRect变量来表示三个按钮的位置CRect Button1_Rect;CRect Button2_Rect;CRect Button3_Rect;4.添加一个CSize的变量来表示客户区大小SIZE OldClientSize;5.初始化各变量在OnCreate函数中OldClientSize.cx=100;OldClientSize.cy=669;GoodFriendState=UP;StrangerState=UP;BlackListState=UP;6.在COicqView中添加函数GetPosition()来获得各个按
9、钮的当前位置void COicqView:GetPosition()this->myButton1.GetWindowRect(&Button1_Rect);/获得窗口坐标ScreenToClient(&Button1_Rect); /转化Client坐标 this->myButton2.GetWindowRect(&Button2_Rect);ScreenToClient(&Butt
10、on2_Rect);this->myButton3.GetWindowRect(&Button3_Rect);ScreenToClient(&Button3_Rect);7.在OnCreate()中添加GetPosition()第五:移动这里只介绍GoodFriend函数的算法,Stranger函数和BlackList函数类似,详见代码下载。void COicqView:GoodFriend() int i; switch(StrangerState)
11、 case UP: switch(BlackListState) case UP: for(i=Butt
12、on3_Rect.top;i<=OldClientSize.cy-Button3_Rect.Height();i+) myButton3.MoveWindow(Button3_Rect.left,i,Button3_Rect.Width(),Button3_Rect.Height
13、(),1); ValidateRect(CRect(Button3_Rect.left,i-1,Button3_Rect.right,i); myButton2.MoveWindow(Button2_Rect.left,i-Button2_
14、Rect.Height(), Button2_Rect.Width(),Button2_Rect.Height(),1); ValidateRect(CRect(Button3_Rect.le
15、ft,i-Button2_Rect.Height()-1,Button3_Rect.right,i); this->GetPosition(); StrangerState=DOWN;
16、 BlackListState=DOWN; break; case DOWN:
17、60; for(i=Button2_Rect.top;i<=Button3_Rect.top-Button2_Rect.Height();i+) myButton2.MoveWindow(Button2_Rect.left,i,Button2_Rect.Width(),Butto
18、n2_Rect.Height(); ValidateRect(CRect(Button2_Rect.left,i-1,Button2_Rect.right,i);
19、160; this->GetPosition(); StrangerState=DOWN; break; case DOWN:
20、; break; 两个关键函数BOOL MoveWindow( int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE );BOOL ValidateRect( LPCRECT lpRect );只要在准备移动部分都看懂了,这是一段不难懂的代码。关键是在MoveWindow后,要用ValidateRect使移动后的空白区域变为有效区。第六:OnSize函数运行后不难发现当改变窗口大小时按钮却大小不变,
21、解决方法,添加OnSize消息函数用ClassWizard,在OnSize中加如下代码即时更新按钮大小。void COicqView:OnSize(UINT nType, int cx, int cy) CView:OnSize(nType, cx, cy); if(cx!=OldClientSize.cx) myButton1.MoveWindow(Button1_Rect.left,Button1
22、_Rect.top,cx,Button1_Rect.Height(); myButton2.MoveWindow(Button2_Rect.left,Button2_Rect.top,cx,Button2_Rect.Height(); myButton3.MoveWindow(Button3_Rect.left,Button3_Rect.top,cx,Button3_Rect.Height(); this->GetPosition(); if(cy!=OldClientSize.cy) if(DOWN=BlackListState)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化工厂危废培训课件
- 山东省枣庄滕州市2025-2026学年上学期期末七年级语文试卷(含答案)
- 辽宁省葫芦岛市2025-2026学年高一上学期1月期末考试化学试卷(含答案)
- 2025~2026学年济南市天桥区七年级第一学期数学期末考试试题以及答案
- 2025-2026学年河南省南阳市镇平第一高级中学高三(上)期末数学试卷(含答案)
- 化工企业双控培训课件
- 飞行安全基础课件
- 钢结构预拼装技术方法详解
- 化工介绍教学
- 2026恒丰银行资金运营中心实习生招收7人参考考试题库及答案解析
- 公路成本管理培训
- 2026湖北随州农商银行科技研发中心第二批人员招聘9人笔试模拟试题及答案解析
- 2025年-辅导员素质能力大赛笔试题库及答案
- GJB3243A-2021电子元器件表面安装要求
- 学堂在线 雨课堂 学堂云 工程伦理 章节测试答案
- 《空气源热泵供暖工程技术规程》
- 河北省唐山市2023-2024学年高一上学期1月期末考试化学试题(含答案解析)
- 附件5:安全爬梯连墙件计算书
- 提高人行道透水砖铺装平整度稳固性试验合格率
- 松铺系数计算表2
- 江苏省高等职业教育实训基地建设指南
评论
0/150
提交评论