Windows 界面设计拉帘按钮设计_第1页
Windows 界面设计拉帘按钮设计_第2页
Windows 界面设计拉帘按钮设计_第3页
Windows 界面设计拉帘按钮设计_第4页
Windows 界面设计拉帘按钮设计_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论