界面_界面设计 - CSDN
精华内容
参与话题
  • 相比之前的那个【简单版】登录界面,该模板新增: 1、js 回车事件,并且能够兼容多个浏览器; 2、界面布局的层次结构优化; 3、按钮监听响应事件的实现方式优化; 4、包含全屏方法的实现; 5、连个div块的叠加; --...
  • 漂亮通用界面

    千次下载 热门讨论 2020-07-30 23:32:04
    Qt漂亮通用界面。 大部分的界面都可以用这个学习,非常漂亮哦!
  • 用MFC做漂亮界面之登录界面

    万次阅读 2018-05-07 10:28:45
    转自:https://blog.csdn.net/u011711997/article/details/79375710前段时间由于工作原因,一直没有更新博客...这个登录界面的效果图如下:分析当我们看到这个界面的时候,先不要忙着去做,先要分析一下哪些是代码做...

    转自:https://blog.csdn.net/u011711997/article/details/79375710

    前段时间由于工作原因,一直没有更新博客,今天,继续讲解如何用MFC做漂亮界面,前几次我们讲了如何美化窗口背景,如何美化标题,如何美化按钮,今天我们用以前学过的知识来一起做一个登录界面,这个登录界面的效果图如下:

    分析

    当我们看到这个界面的时,先不要忙着去做,先要分析一下哪些是代码做的,哪些不是代码做的,这样就可以减少工作量。大家试试看,分析一下哪些是留在背景上的,不需要我们去做?没错,一共有5个部分是留在背景上的,分别如下:

    第一个是老虎,这个不用多说。

    第二个是账号,因为这个是美术字,加了特效,代码没法实现。

    第三个是密码,同上。

    第四个是账号输入框,因为这个框的边框加了特效,所以要留下。

    第五个是密码输入框,同上。

    美化窗口背景

    创建一个对话框项目,命名为LoginTigger,去掉取消按钮和确定按钮,并且修改对话框的Border为None,然后在函数OnInitDialog中修改窗口尺寸为背景图片尺寸。具体如下:

    1. BOOL CLoginTiggerDlg::OnInitDialog()  
    2. {  
    3.     CDialogEx::OnInitDialog();  
    4.   
    5.     // 将“关于...”菜单项添加到系统菜单中。  
    6.   
    7.     // IDM_ABOUTBOX 必须在系统命令范围内。  
    8.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  
    9.     ASSERT(IDM_ABOUTBOX < 0xF000);  
    10.   
    11.     CMenu* pSysMenu = GetSystemMenu(FALSE);  
    12.     if (pSysMenu != NULL)  
    13.     {  
    14.         BOOL bNameValid;  
    15.         CString strAboutMenu;  
    16.         bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);  
    17.         ASSERT(bNameValid);  
    18.         if (!strAboutMenu.IsEmpty())  
    19.         {  
    20.             pSysMenu->AppendMenu(MF_SEPARATOR);  
    21.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);  
    22.         }  
    23.     }  
    24.   
    25.     // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动  
    26.     //  执行此操作  
    27.     SetIcon(m_hIcon, TRUE);         // 设置大图标  
    28.     SetIcon(m_hIcon, FALSE);        // 设置小图标  
    29.   
    30.     // TODO:  在此添加额外的初始化代码  
    31.   
    32.     //这个是我们自己加的  
    33.     MoveWindow(0, 0, 300, 400);  
    34.   
    35.     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE  
    36. }  

    然后,编译代码,效果如下:

    下面我们显示背景图片到窗口中,就完成了美化背景,首先在我们的对话框的头文件中增加一个CBrush变量,变量名是m_bkBrush,它代表我们的背景图片,在OnInitDialog中加载背景图片Tigger.png,具体如下:

    1. BOOL CLoginTiggerDlg::OnInitDialog()  
    2. {  
    3.     CDialogEx::OnInitDialog();  
    4.   
    5.     // 将“关于...”菜单项添加到系统菜单中。  
    6.   
    7.     // IDM_ABOUTBOX 必须在系统命令范围内。  
    8.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  
    9.     ASSERT(IDM_ABOUTBOX < 0xF000);  
    10.   
    11.     CMenu* pSysMenu = GetSystemMenu(FALSE);  
    12.     if (pSysMenu != NULL)  
    13.     {  
    14.         BOOL bNameValid;  
    15.         CString strAboutMenu;  
    16.         bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);  
    17.         ASSERT(bNameValid);  
    18.         if (!strAboutMenu.IsEmpty())  
    19.         {  
    20.             pSysMenu->AppendMenu(MF_SEPARATOR);  
    21.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);  
    22.         }  
    23.     }  
    24.   
    25.     // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动  
    26.     //  执行此操作  
    27.     SetIcon(m_hIcon, TRUE);         // 设置大图标  
    28.     SetIcon(m_hIcon, FALSE);        // 设置小图标  
    29.   
    30.     // TODO:  在此添加额外的初始化代码  
    31.   
    32.     //这个是我们自己加的  
    33.     MoveWindow(0, 0, 300, 400);  
    34.   
    35.     //加载背景图片  
    36.   
    37.     CString strBmpPath = _T(".\\res\\Tigger.png");  
    38.   
    39.     CImage img;  
    40.   
    41.     img.Load(strBmpPath);  
    42.   
    43.     CBitmap bmpTmp;  
    44.   
    45.     bmpTmp.Attach(img.Detach());  
    46.   
    47.     m_bkBrush.CreatePatternBrush(&bmpTmp);  
    48.   
    49.     return TRUE;  
    50. }  

    然后添加WM_CTLCOLOR响应函数,不懂得可以翻阅一下前面的文章,具体如下:

    1. HBRUSH CLoginTiggerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)  
    2. {  
    3.     HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);  
    4.   
    5.     // TODO:  在此更改 DC 的任何特性  
    6.   
    7.     // TODO:  如果默认的不是所需画笔,则返回另一个画笔  
    8.   
    9.     if (pWnd == this)  
    10.     {  
    11.         return m_bkBrush;  
    12.     }  
    13.   
    14.     return hbr;  
    15. }  

    编译,运行效果如下:


    至此,美化背景完成,是不是很简单。

    添加标题

    我们首先创建一个CCaption类,继承自CStatic,然后添加成员函数HBRUSH CtlColor(CDC* pDC, UINT nCtlColor),不懂得可以翻阅前面的文章,具体如下:

    1. HBRUSH CCaption::CtlColor(CDC* pDC, UINT /*nCtlColor*/)  
    2. {  
    3.     CFont font;  
    4.     LOGFONT lf;  
    5.     if (!pDC)  
    6.         return NULL;  
    7.     //创建一个空画刷,返回这个画刷可以让静态控件的背景透明    
    8.     HBRUSH hr = (HBRUSH)GetStockObject(NULL_BRUSH);  
    9.     //让文字的背景透明        
    10.     pDC->SetBkMode(TRANSPARENT);  
    11.     //设置文字的颜色为白色    
    12.     pDC->SetTextColor(RGB(255, 255, 255));  
    13.     ::ZeroMemory(&lf, sizeof(lf));  
    14.     //设置逻辑字体的高度  
    15.     lf.lfHeight = 24;  
    16.     //设置逻辑字体为粗体字    
    17.     lf.lfWeight = FW_BOLD;  
    18.     //设置字体为宋体    
    19.     ::lstrcpy(lf.lfFaceName, _T("宋体"));  
    20.     //用逻辑字体创建一个CFont对象    
    21.     font.CreateFontIndirect(&lf);  
    22.     //应用字体    
    23.     pDC->SelectObject(&font);  
    24.     return hr;  
    25. }  

    然后再添加一个成员函数,控制这个标题的显示位置和范围,具体如下:

    1. void CCaption::Init(int nX, int nY, int nW, int nH)  
    2. {  
    3.     MoveWindow(nX, nY, nW, nH);  
    4. }  

    然后,在对话框上添加一个静态控件,ID为IDC_STATIC_CAPTION,并且为它定义一个控件变量,命名为m_staticCap,再然后,修改它的类型为CCaption,并在OnInitDialog中设置标题的位置和范围,具体代码如下:

    1. BOOL CLoginTiggerDlg::OnInitDialog()  
    2. {  
    3.     CDialogEx::OnInitDialog();  
    4.   
    5.     // 将“关于...”菜单项添加到系统菜单中。  
    6.   
    7.     // IDM_ABOUTBOX 必须在系统命令范围内。  
    8.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  
    9.     ASSERT(IDM_ABOUTBOX < 0xF000);  
    10.   
    11.     CMenu* pSysMenu = GetSystemMenu(FALSE);  
    12.     if (pSysMenu != NULL)  
    13.     {  
    14.         BOOL bNameValid;  
    15.         CString strAboutMenu;  
    16.         bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);  
    17.         ASSERT(bNameValid);  
    18.         if (!strAboutMenu.IsEmpty())  
    19.         {  
    20.             pSysMenu->AppendMenu(MF_SEPARATOR);  
    21.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);  
    22.         }  
    23.     }  
    24.   
    25.     // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动  
    26.     //  执行此操作  
    27.     SetIcon(m_hIcon, TRUE);         // 设置大图标  
    28.     SetIcon(m_hIcon, FALSE);        // 设置小图标  
    29.   
    30.     // TODO:  在此添加额外的初始化代码  
    31.   
    32.     //这个是我们自己加的  
    33.     MoveWindow(0, 0, 300, 400);  
    34.   
    35.     //加载背景图片  
    36.   
    37.     CString strBmpPath = _T(".\\res\\Tigger.png");  
    38.   
    39.     CImage img;  
    40.   
    41.     img.Load(strBmpPath);  
    42.   
    43.     CBitmap bmpTmp;  
    44.   
    45.     bmpTmp.Attach(img.Detach());  
    46.   
    47.     m_bkBrush.CreatePatternBrush(&bmpTmp);  
    48.   
    49.     //调整标题位置  
    50.   
    51.     m_staticCap.Init(4, 8,105, 30);  
    52.   
    53.     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE  
    54. }  

    编译程序,显示效果如下:

    根据前面的学习,相信肯定有同学会说,还没有加窗口移动,对,别着急,现在就加,具体代码如下:

    1. LRESULT CLoginTiggerDlg::OnNcHitTest(CPoint point)  
    2. {  
    3.     // TODO:  在此添加消息处理程序代码和/或调用默认值  
    4.     LRESULT ret = CDialogEx::OnNcHitTest(point);  
    5.     return (ret == HTCLIENT) ? HTCAPTION : ret;  
    6. }  
    不懂得,可以看一下前面的文章,这里就不做过多介绍了。

    添加关闭按钮

    关闭按钮一共有三张图片分别对应正常,按下,悬浮(鼠标移动在上面的时候),具体如下:


    首先我们需要为对话框添加一个关闭按钮的控件,命名为IDC_BUTTON_CLOSE,然后设置为Owner Draw,并添加一个控件变量,命名为m_btnClose,然后定义一个美化的按钮类,继承自CButton,命名为CMyButton,具体代码如下:

    MyButton.h内容如下:

    1. #pragma once  
    2.   
    3. // CMyButton  
    4.   
    5. class CMyButton : public CButton  
    6. {  
    7.     DECLARE_DYNAMIC(CMyButton)  
    8.   
    9. public:  
    10.     CMyButton();  
    11.     virtual ~CMyButton();  
    12.   
    13. protected:  
    14.     //正常状态图像路径  
    15.     CString m_strNormalImgPath;  
    16.     //按下状态图像路径  
    17.     CString m_strPressImgPath;  
    18.     //悬浮状态图像路径  
    19.     CString m_strFloatImgPath;  
    20.   
    21.     //正常状态图像  
    22.     CImage m_imgNormal;  
    23.     //按下状态图像  
    24.     CImage m_imgPress;  
    25.     //悬浮状态图像  
    26.     CImage m_imgFloat;  
    27.   
    28.     //窗口背景图片  
    29.     CImage m_BkImg;  
    30.   
    31. public:  
    32.   
    33.     //设置按钮图片路径  
    34.     void SetImagePath(CString strNoramlImgPath, CString strPressImgPath, CString strFloatImgPath);  
    35.     //初始化按钮,主要是调整按钮的位置,处理透明色    
    36.     bool InitMyButton(int nX/*左上角X坐标*/int nY/*左上角Y坐标*/int nW/*图像宽*/int nH/*图像高*/bool bIsPng/*是否是PNG图片*/);  
    37.     //自绘制函数    
    38.     void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);  
    39.   
    40.     //初始化窗口背景  
    41.     void SetBkImg(CString strBkImg);  
    42.   
    43. protected:  
    44.     //光标是否在窗口内  
    45.     BOOL m_bIsInWnd;  
    46.     DECLARE_MESSAGE_MAP()  
    47. public:  
    48.     afx_msg void OnMouseMove(UINT nFlags, CPoint point);  
    49.     afx_msg void OnMouseHover(UINT nFlags, CPoint point);  
    50.     afx_msg void OnMouseLeave();  
    51.   
    52.       
    53. };  

    MyButton.cpp内容如下:

    1. // MyButton.cpp : 实现文件  
    2. //  
    3.   
    4. #include "stdafx.h"  
    5. #include "LoginTigger.h"  
    6. #include "MyButton.h"  
    7.   
    8.   
    9. // CMyButton  
    10.   
    11. IMPLEMENT_DYNAMIC(CMyButton, CButton)  
    12.   
    13. CMyButton::CMyButton()  
    14. {  
    15.     m_bIsInWnd = FALSE;  
    16. }  
    17.   
    18. CMyButton::~CMyButton()  
    19. {  
    20. }  
    21.   
    22.   
    23. BEGIN_MESSAGE_MAP(CMyButton, CButton)  
    24.     ON_WM_MOUSEMOVE()  
    25.     ON_WM_MOUSEHOVER()  
    26.     ON_WM_MOUSELEAVE()  
    27. END_MESSAGE_MAP()  
    28.   
    29.   
    30.   
    31. // CMyButton 消息处理程序  
    32.   
    33. //设置按钮图片路径  
    34. void CMyButton::SetImagePath(CString strNoramlImgPath, CString strPressImgPath, CString strFloatImgPath)  
    35. {  
    36.     m_strNormalImgPath = strNoramlImgPath;  
    37.     m_strPressImgPath = strPressImgPath;  
    38.     m_strFloatImgPath = strFloatImgPath;  
    39. }  
    40.   
    41. void CMyButton::SetBkImg(CString strBkImg)  
    42. {  
    43.     if (strBkImg.IsEmpty())  
    44.         return;  
    45.     m_BkImg.Load(strBkImg);  
    46. }  
    47.   
    48. //初始化按钮,主要是调整按钮的位置,处理透明色    
    49. bool CMyButton::InitMyButton(int nX/*左上角X坐标*/int nY/*左上角Y坐标*/int nW/*图像宽*/int nH/*图像高*/bool bIsPng/*是否是PNG图片*/)  
    50. {  
    51.     HRESULT hr = 0;  
    52.   
    53.     if (m_strNormalImgPath.IsEmpty())  
    54.         return false;  
    55.     if (m_strPressImgPath.IsEmpty())  
    56.         return false;  
    57.     if (m_strFloatImgPath.IsEmpty())  
    58.         return false;  
    59.   
    60.     hr = m_imgNormal.Load(m_strNormalImgPath);  
    61.   
    62.     int a = GetLastError();  
    63.   
    64.     if (FAILED(hr))  
    65.         return false;  
    66.   
    67.     hr = m_imgPress.Load(m_strPressImgPath);  
    68.   
    69.     if (FAILED(hr))  
    70.         return false;  
    71.   
    72.     hr = m_imgFloat.Load(m_strFloatImgPath);  
    73.   
    74.     if (FAILED(hr))  
    75.         return false;  
    76.   
    77.     if (bIsPng)  
    78.     {  
    79.         if (m_imgNormal.GetBPP() == 32)  
    80.         {  
    81.             int i = 0;  
    82.             int j = 0;  
    83.             for (i = 0; i < m_imgNormal.GetWidth(); i++)  
    84.             {  
    85.                 for (j = 0; j < m_imgNormal.GetHeight(); j++)  
    86.                 {  
    87.                     byte * pbyte = (byte *)m_imgNormal.GetPixelAddress(i, j);  
    88.                     pbyte[0] = pbyte[0] * pbyte[3] / 255;  
    89.                     pbyte[1] = pbyte[1] * pbyte[3] / 255;  
    90.                     pbyte[2] = pbyte[2] * pbyte[3] / 255;  
    91.                 }  
    92.             }  
    93.         }  
    94.   
    95.         if (m_imgPress.GetBPP() == 32)  
    96.         {  
    97.             int i = 0;  
    98.             int j = 0;  
    99.             for (i = 0; i < m_imgPress.GetWidth(); i++)  
    100.             {  
    101.                 for (j = 0; j < m_imgPress.GetHeight(); j++)  
    102.                 {  
    103.                     byte * pbyte = (byte *)m_imgPress.GetPixelAddress(i, j);  
    104.                     pbyte[0] = pbyte[0] * pbyte[3] / 255;  
    105.                     pbyte[1] = pbyte[1] * pbyte[3] / 255;  
    106.                     pbyte[2] = pbyte[2] * pbyte[3] / 255;  
    107.                 }  
    108.             }  
    109.         }  
    110.   
    111.         if (m_imgFloat.GetBPP() == 32)  
    112.         {  
    113.             int i = 0;  
    114.             int j = 0;  
    115.             for (i = 0; i < m_imgFloat.GetWidth(); i++)  
    116.             {  
    117.                 for (j = 0; j < m_imgFloat.GetHeight(); j++)  
    118.                 {  
    119.                     byte * pbyte = (byte *)m_imgFloat.GetPixelAddress(i, j);  
    120.                     pbyte[0] = pbyte[0] * pbyte[3] / 255;  
    121.                     pbyte[1] = pbyte[1] * pbyte[3] / 255;  
    122.                     pbyte[2] = pbyte[2] * pbyte[3] / 255;  
    123.                 }  
    124.             }  
    125.         }  
    126.     }  
    127.   
    128.     MoveWindow(nX, nY, nW, nH);  
    129.   
    130.     return true;  
    131.   
    132. }  
    133. //自绘制函数    
    134. void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)  
    135. {  
    136.     if (!lpDrawItemStruct)  
    137.         return;  
    138.     HDC hMemDC;  
    139.     HBITMAP bmpMem;  
    140.     HGDIOBJ hOldObj;  
    141.     bmpMem = CreateCompatibleBitmap(lpDrawItemStruct->hDC, lpDrawItemStruct->rcItem.right - lpDrawItemStruct->rcItem.left, lpDrawItemStruct->rcItem.bottom - lpDrawItemStruct->rcItem.top);  
    142.     if (!bmpMem)  
    143.         return;  
    144.     hMemDC = CreateCompatibleDC(lpDrawItemStruct->hDC);  
    145.     if (!hMemDC)  
    146.     {  
    147.         if (bmpMem)  
    148.         {  
    149.             ::DeleteObject(bmpMem);  
    150.             bmpMem = NULL;  
    151.         }  
    152.         return;  
    153.     }  
    154.   
    155.     hOldObj = ::SelectObject(hMemDC, bmpMem);  
    156.   
    157.     int nW = lpDrawItemStruct->rcItem.right - lpDrawItemStruct->rcItem.left;  
    158.   
    159.     int nH = lpDrawItemStruct->rcItem.bottom - lpDrawItemStruct->rcItem.top;  
    160.   
    161.     RECT rectTmp = { 0 };  
    162.   
    163.     rectTmp = lpDrawItemStruct->rcItem;  
    164.   
    165.     MapWindowPoints(GetParent(), &rectTmp);  
    166.   
    167.     if (m_BkImg.IsNull() == false)  
    168.         m_BkImg.Draw(hMemDC, 0, 0, rectTmp.right - rectTmp.left, rectTmp.bottom - rectTmp.top, rectTmp.left, rectTmp.top, rectTmp.right - rectTmp.left, rectTmp.bottom - rectTmp.top);  
    169.       
    170.     if (lpDrawItemStruct->itemState & ODS_SELECTED)  
    171.     {  
    172.         //按钮被选择    
    173.         m_imgPress.AlphaBlend(hMemDC, 0, 0, nW, nH, 0, 0, nW, nH);  
    174.     }  
    175.     else  
    176.     {  
    177.         //默认状态    
    178.         m_imgNormal.AlphaBlend(hMemDC, 0, 0, nW, nH, 0, 0, nW, nH);  
    179.   
    180.     }  
    181.   
    182.     ::BitBlt(lpDrawItemStruct->hDC, 0, 0, nW, nH, hMemDC,0,0,SRCCOPY);  
    183.   
    184.     SelectObject(hMemDC, hOldObj);  
    185.   
    186.     if (bmpMem)  
    187.     {  
    188.         ::DeleteObject(bmpMem);  
    189.         bmpMem = NULL;  
    190.     }  
    191.   
    192.     if (hMemDC)  
    193.     {  
    194.         ::DeleteDC(hMemDC);  
    195.         hMemDC = NULL;  
    196.     }  
    197.     return;  
    198. }  
    199.   
    200. void CMyButton::OnMouseMove(UINT nFlags, CPoint point)  
    201. {  
    202.     // TODO:  在此添加消息处理程序代码和/或调用默认值  
    203.   
    204.     CButton::OnMouseMove(nFlags, point);  
    205.     if (!m_bIsInWnd)  
    206.     {  
    207.         TRACKMOUSEEVENT       tme;  
    208.         tme.cbSize = sizeof(TRACKMOUSEEVENT);  
    209.         tme.dwFlags = TME_HOVER | TME_LEAVE;  
    210.         tme.dwHoverTime = 10;  
    211.         tme.hwndTrack = m_hWnd;  
    212.         _TrackMouseEvent(&tme);  
    213.         m_bIsInWnd = TRUE;  
    214.     }  
    215. }  
    216.   
    217.   
    218. void CMyButton::OnMouseHover(UINT nFlags, CPoint point)  
    219. {  
    220.     // TODO:  在此添加消息处理程序代码和/或调用默认值  
    221.   
    222.     HDC hMemDC;  
    223.     HBITMAP bmpMem;  
    224.     HGDIOBJ hOldObj;  
    225.     HDC hDC = ::GetDC(GetSafeHwnd());  
    226.     CRect rcItem;  
    227.     GetClientRect(&rcItem);  
    228.   
    229.     if (hDC)  
    230.     {  
    231.         bmpMem = CreateCompatibleBitmap(hDC, rcItem.Width(), rcItem.Height());  
    232.         if (!bmpMem)  
    233.         {  
    234.             ::ReleaseDC(GetSafeHwnd(), hDC);  
    235.             return;  
    236.         }  
    237.         hMemDC = CreateCompatibleDC(hDC);  
    238.         if (!hMemDC)  
    239.         {  
    240.             if (bmpMem)  
    241.             {  
    242.                 ::DeleteObject(bmpMem);  
    243.                 bmpMem = NULL;  
    244.             }  
    245.             ::ReleaseDC(GetSafeHwnd(), hDC);  
    246.             return;  
    247.         }  
    248.   
    249.         hOldObj = ::SelectObject(hMemDC, bmpMem);  
    250.   
    251.         RECT rectTmp = { 0 };  
    252.   
    253.         rectTmp = rcItem;  
    254.   
    255.         MapWindowPoints(GetParent(), &rectTmp);  
    256.   
    257.         if (m_BkImg.IsNull() == false)  
    258.             m_BkImg.Draw(hMemDC, 0, 0, rectTmp.right - rectTmp.left, rectTmp.bottom - rectTmp.top, rectTmp.left, rectTmp.top, rectTmp.right - rectTmp.left, rectTmp.bottom - rectTmp.top);  
    259.   
    260.         int nW = rcItem.right - rcItem.left;  
    261.   
    262.         int nH = rcItem.bottom - rcItem.top;  
    263.   
    264.         m_imgFloat.AlphaBlend(hMemDC, 0, 0, nW, nH, 0, 0,nW,nH);  
    265.   
    266.         ::BitBlt(hDC, 0, 0, nW, nH, hMemDC, 0, 0, SRCCOPY);  
    267.   
    268.         SelectObject(hMemDC, hOldObj);  
    269.   
    270.         if (bmpMem)  
    271.         {  
    272.             ::DeleteObject(bmpMem);  
    273.             bmpMem = NULL;  
    274.         }  
    275.   
    276.         if (hMemDC)  
    277.         {  
    278.             ::DeleteDC(hMemDC);  
    279.             hMemDC = NULL;  
    280.         }  
    281.   
    282.         ::ReleaseDC(GetSafeHwnd(), hDC);  
    283.     }  
    284.   
    285.     CButton::OnMouseHover(nFlags, point);  
    286. }  
    287.   
    288.   
    289. void CMyButton::OnMouseLeave()  
    290. {  
    291.     // TODO:  在此添加消息处理程序代码和/或调用默认值  
    292.   
    293.     CButton::OnMouseLeave();  
    294.     InvalidateRect(NULL);  
    295.     m_bIsInWnd = FALSE;  
    296. }  

    不懂的同学可以看一下前面的文章,编译程序,运行效果如下:


    上面的图片显示了关闭按钮的三种状态效果,即正常,悬浮,按下。

    添加账号和密码输入框

    首先添加一个编辑框,命名为IDC_EDIT_NAME,设置边框属性为False,为它添加一个控件变量,命名为m_editName,然后为它设置一个字体需求,宋体,24点,具体代码如下:

    1. BOOL CLoginTiggerDlg::OnInitDialog()  
    2. {  
    3.     CDialogEx::OnInitDialog();  
    4.   
    5.     // 将“关于...”菜单项添加到系统菜单中。  
    6.   
    7.     // IDM_ABOUTBOX 必须在系统命令范围内。  
    8.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  
    9.     ASSERT(IDM_ABOUTBOX < 0xF000);  
    10.   
    11.     CMenu* pSysMenu = GetSystemMenu(FALSE);  
    12.     if (pSysMenu != NULL)  
    13.     {  
    14.         BOOL bNameValid;  
    15.         CString strAboutMenu;  
    16.         bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);  
    17.         ASSERT(bNameValid);  
    18.         if (!strAboutMenu.IsEmpty())  
    19.         {  
    20.             pSysMenu->AppendMenu(MF_SEPARATOR);  
    21.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);  
    22.         }  
    23.     }  
    24.   
    25.     // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动  
    26.     //  执行此操作  
    27.     SetIcon(m_hIcon, TRUE);         // 设置大图标  
    28.     SetIcon(m_hIcon, FALSE);        // 设置小图标  
    29.   
    30.     // TODO:  在此添加额外的初始化代码  
    31.   
    32.     //这个是我们自己加的  
    33.     MoveWindow(0, 0, 300, 400);  
    34.   
    35.     //加载背景图片  
    36.   
    37.     CString strBmpPath = _T(".\\res\\Tigger.png");  
    38.   
    39.     CImage img;  
    40.   
    41.     img.Load(strBmpPath);  
    42.   
    43.     CBitmap bmpTmp;  
    44.   
    45.     bmpTmp.Attach(img.Detach());  
    46.   
    47.     m_bkBrush.CreatePatternBrush(&bmpTmp);  
    48.   
    49.     //调整标题位置  
    50.   
    51.     m_staticCap.Init(4, 8,105, 30);  
    52.   
    53.     //关闭按钮设置  
    54.   
    55.     m_btnClose.SetImagePath(_T("./res/TigerCloseNormal.png"), _T("./res/TigerClosePress.png"), _T("./res/TigerCloseFloat.png"));  
    56.       
    57.     m_btnClose.InitMyButton(271, 8, 20, 20, true);  
    58.   
    59.     //调整光标的位置适中  
    60.   
    61.     m_editName.MoveWindow(82, 261 + 4, 200, 31 - 4);  
    62.   
    63.     CFont*  pFont = m_editName.GetFont();  
    64.   
    65.     LOGFONT  lf;  
    66.   
    67.     if (pFont)  
    68.     {  
    69.         pFont->GetLogFont(&lf);  
    70.   
    71.         lf.lfHeight = 24;//改变字体高度      
    72.   
    73.         _tcscpy(lf.lfFaceName, _T("宋体"));//改变字体名称      
    74.   
    75.         m_fontEdit.CreateFontIndirect(&lf);  
    76.   
    77.         m_editName.SetFont(&m_fontEdit);  
    78.     }  
    79.   
    80.     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE  
    81. }  

    然后修改控件字体的颜色,具体代码如下:

    1. HBRUSH CLoginTiggerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)  
    2. {  
    3.     HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);  
    4.   
    5.     // TODO:  在此更改 DC 的任何特性  
    6.   
    7.     if (pWnd == this)  
    8.     {  
    9.         return m_bkBrush;  
    10.     }  
    11.   
    12.     // TODO:  如果默认的不是所需画笔,则返回另一个画笔  
    13.   
    14.     //输入账号  
    15.     if (pWnd == &m_editName)  
    16.     {  
    17.         CFont font;  
    18.         LOGFONT lf;  
    19.         if (!pDC)  
    20.             return NULL;  
    21.   
    22.         //创建一个空画刷,返回这个画刷可以让静态控件的背景透明    
    23.         HBRUSH hr = (HBRUSH)GetStockObject(NULL_BRUSH);  
    24.         //让文字的背景透明        
    25.         pDC->SetBkMode(TRANSPARENT);  
    26.         //设置文字的颜色为白色    
    27.         pDC->SetTextColor(RGB(200, 200, 200));  
    28.     }  
    29.   
    30.     return hbr;  
    31. }  

    编译程序,运行效果如下:

    密码输入框的制作与账号输入框相同,唯一不同的地方就是设置Password属性为真,密码输入框的ID为IDC_EDIT_PWD,为其添加一个控件变量m_editPwd,然后调整它的位置,并设置字体,具体代码如下:

    1. BOOL CLoginTiggerDlg::OnInitDialog()  
    2. {  
    3.     CDialogEx::OnInitDialog();  
    4.   
    5.     // 将“关于...”菜单项添加到系统菜单中。  
    6.   
    7.     // IDM_ABOUTBOX 必须在系统命令范围内。  
    8.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  
    9.     ASSERT(IDM_ABOUTBOX < 0xF000);  
    10.   
    11.     CMenu* pSysMenu = GetSystemMenu(FALSE);  
    12.     if (pSysMenu != NULL)  
    13.     {  
    14.         BOOL bNameValid;  
    15.         CString strAboutMenu;  
    16.         bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);  
    17.         ASSERT(bNameValid);  
    18.         if (!strAboutMenu.IsEmpty())  
    19.         {  
    20.             pSysMenu->AppendMenu(MF_SEPARATOR);  
    21.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);  
    22.         }  
    23.     }  
    24.   
    25.     // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动  
    26.     //  执行此操作  
    27.     SetIcon(m_hIcon, TRUE);         // 设置大图标  
    28.     SetIcon(m_hIcon, FALSE);        // 设置小图标  
    29.   
    30.     // TODO:  在此添加额外的初始化代码  
    31.   
    32.     //这个是我们自己加的  
    33.     MoveWindow(0, 0, 300, 400);  
    34.   
    35.     //加载背景图片  
    36.   
    37.     CString strBmpPath = _T(".\\res\\Tigger.png");  
    38.   
    39.     CImage img;  
    40.   
    41.     img.Load(strBmpPath);  
    42.   
    43.     CBitmap bmpTmp;  
    44.   
    45.     bmpTmp.Attach(img.Detach());  
    46.   
    47.     m_bkBrush.CreatePatternBrush(&bmpTmp);  
    48.   
    49.     //调整标题位置  
    50.   
    51.     m_staticCap.Init(4, 8,105, 30);  
    52.   
    53.     //关闭按钮设置  
    54.   
    55.     m_btnClose.SetImagePath(_T("./res/TigerCloseNormal.png"), _T("./res/TigerClosePress.png"), _T("./res/TigerCloseFloat.png"));  
    56.       
    57.     m_btnClose.InitMyButton(271, 8, 20, 20, true);  
    58.   
    59.     //账号输入框  
    60.   
    61.     //调整光标的位置适中  
    62.   
    63.     m_editName.MoveWindow(82, 261 + 4, 200, 31 - 4);  
    64.   
    65.     CFont*  pFont = m_editName.GetFont();  
    66.   
    67.     LOGFONT  lf;  
    68.   
    69.     if (pFont)  
    70.     {  
    71.         pFont->GetLogFont(&lf);  
    72.   
    73.         lf.lfHeight = 24;//改变字体高度      
    74.   
    75.         _tcscpy(lf.lfFaceName, _T("宋体"));//改变字体名称      
    76.   
    77.         m_fontEdit.CreateFontIndirect(&lf);  
    78.   
    79.         m_editName.SetFont(&m_fontEdit);  
    80.     }  
    81.   
    82.     //密码输入框  
    83.   
    84.     m_editPwd.MoveWindow(82, 308, 200, 25);  
    85.   
    86.     m_editPwd.SetFont(&m_fontEdit);  
    87.   
    88.     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE  
    89. }  

    为其设置字体颜色,具体代码与账号输入框一样,具体代码如下:

    1. HBRUSH CLoginTiggerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)  
    2. {  
    3.     HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);  
    4.   
    5.     // TODO:  在此更改 DC 的任何特性  
    6.   
    7.     if (pWnd == this)  
    8.     {  
    9.         return m_bkBrush;  
    10.     }  
    11.   
    12.     // TODO:  如果默认的不是所需画笔,则返回另一个画笔  
    13.   
    14.     //输入账号  
    15.     if (pWnd == &m_editName)  
    16.     {  
    17.         CFont font;  
    18.         LOGFONT lf;  
    19.         if (!pDC)  
    20.             return NULL;  
    21.   
    22.         //创建一个空画刷,返回这个画刷可以让静态控件的背景透明    
    23.         HBRUSH hr = (HBRUSH)GetStockObject(NULL_BRUSH);  
    24.         //让文字的背景透明        
    25.         pDC->SetBkMode(TRANSPARENT);  
    26.         //设置文字的颜色为白色    
    27.         pDC->SetTextColor(RGB(200, 200, 200));  
    28.     }  
    29.   
    30.     //输入密码  
    31.     if (pWnd == &m_editPwd)  
    32.     {  
    33.         CFont font;  
    34.         LOGFONT lf;  
    35.         if (!pDC)  
    36.             return NULL;  
    37.   
    38.         //创建一个空画刷,返回这个画刷可以让静态控件的背景透明    
    39.         HBRUSH hr = (HBRUSH)GetStockObject(NULL_BRUSH);  
    40.         //让文字的背景透明        
    41.         pDC->SetBkMode(TRANSPARENT);  
    42.         //设置文字的颜色为白色    
    43.         pDC->SetTextColor(RGB(200, 200, 200));  
    44.     }  
    45.   
    46.     return hbr;  
    47. }  

    编译程序,运行效果如下:


    添加登录和注册按钮

    登录按钮和注册按钮与关闭按钮的代码一样,所以我们只需要使用CMyButton类就可以,唯一需要调整的就是它们的图片不一样,所以这里我们只说说不同的地方,首先添加两个按钮控件,ID分别为IDC_BUTTON_LOGIN和IDC_BUTTON_REG,分别为它们添加两个控件变量m_btnLogin和m_btnReg,然后修改它们的控件类型为CMyButton,最后在OnInitDialog中初始化它们的位置和图片,具体代码如下:

    1. BOOL CLoginTiggerDlg::OnInitDialog()  
    2. {  
    3.     CDialogEx::OnInitDialog();  
    4.   
    5.     // 将“关于...”菜单项添加到系统菜单中。  
    6.   
    7.     // IDM_ABOUTBOX 必须在系统命令范围内。  
    8.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  
    9.     ASSERT(IDM_ABOUTBOX < 0xF000);  
    10.   
    11.     CMenu* pSysMenu = GetSystemMenu(FALSE);  
    12.     if (pSysMenu != NULL)  
    13.     {  
    14.         BOOL bNameValid;  
    15.         CString strAboutMenu;  
    16.         bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);  
    17.         ASSERT(bNameValid);  
    18.         if (!strAboutMenu.IsEmpty())  
    19.         {  
    20.             pSysMenu->AppendMenu(MF_SEPARATOR);  
    21.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);  
    22.         }  
    23.     }  
    24.   
    25.     // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动  
    26.     //  执行此操作  
    27.     SetIcon(m_hIcon, TRUE);         // 设置大图标  
    28.     SetIcon(m_hIcon, FALSE);        // 设置小图标  
    29.   
    30.     // TODO:  在此添加额外的初始化代码  
    31.   
    32.     //这个是我们自己加的  
    33.     MoveWindow(0, 0, 300, 400);  
    34.   
    35.     //加载背景图片  
    36.   
    37.     CString strBmpPath = _T(".\\res\\Tigger.png");  
    38.   
    39.     CImage img;  
    40.   
    41.     img.Load(strBmpPath);  
    42.   
    43.     CBitmap bmpTmp;  
    44.   
    45.     bmpTmp.Attach(img.Detach());  
    46.   
    47.     m_bkBrush.CreatePatternBrush(&bmpTmp);  
    48.   
    49.     //调整标题位置  
    50.   
    51.     m_staticCap.Init(4, 8,105, 30);  
    52.   
    53.     //关闭按钮设置  
    54.   
    55.     m_btnClose.SetImagePath(_T("./res/TigerCloseNormal.png"), _T("./res/TigerClosePress.png"), _T("./res/TigerCloseFloat.png"));  
    56.       
    57.     m_btnClose.InitMyButton(271, 8, 20, 20, true);  
    58.   
    59.     //登录和注册按钮设置  
    60.   
    61.     m_btnLogin.SetImagePath(_T("./res/tigerLoginNormal.png"), _T("./res/tigerLoginPress.png"), _T("./res/TigerLoginFloat.png"));  
    62.   
    63.     m_btnLogin.InitMyButton(23, 355, 115, 35, true);  
    64.   
    65.     m_btnReg.SetImagePath(_T("./res/tigerRegisterNormal.png"), _T("./res/tigerRegisterPress.png"), _T("./res/TigerRegisterFloat.png"));  
    66.   
    67.     m_btnReg.InitMyButton(167, 355, 115, 35,true);  
    68.   
    69.     m_btnLogin.SetBkImg(strBmpPath);  
    70.   
    71.     m_btnReg.SetBkImg(strBmpPath);  
    72.   
    73.     //账号输入框  
    74.   
    75.     //调整光标的位置适中  
    76.   
    77.     m_editName.MoveWindow(82, 261 + 4, 200, 31 - 4);  
    78.   
    79.     CFont*  pFont = m_editName.GetFont();  
    80.   
    81.     LOGFONT  lf;  
    82.   
    83.     if (pFont)  
    84.     {  
    85.         pFont->GetLogFont(&lf);  
    86.   
    87.         lf.lfHeight = 24;//改变字体高度      
    88.   
    89.         _tcscpy(lf.lfFaceName, _T("宋体"));//改变字体名称      
    90.   
    91.         m_fontEdit.CreateFontIndirect(&lf);  
    92.   
    93.         m_editName.SetFont(&m_fontEdit);  
    94.     }  
    95.   
    96.     //密码输入框  
    97.   
    98.     m_editPwd.MoveWindow(82, 308, 200, 25);  
    99.   
    100.     m_editPwd.SetFont(&m_fontEdit);   
    101.   
    102.     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE  
    103. }  

    编译程序,运行效果如下:

    至此我们的登录界面就做完了,有不懂得地方可以翻阅一下前面的文章,需要下载源码的同学,可以从下面的地址下载:

    http://download.csdn.net/download/u011711997/10261765



    展开全文
  • Qt界面开发(一)(各种控件以及图表)

    万次阅读 多人点赞 2020-07-25 10:38:37
    注:资源主要来源:http://www.qtcn.org/bbs/u/110085... 如若侵权,请联系删除。 本文只是将作品集合到起来,方便大家一起学习。 ... Qt界面开发(各种控件以及图表) 1.Qt简洁窗体 源代码链接:点击打开链接 2....

    注:资源主要来源http://www.qtcn.org/bbs/u/110085 (刘大神)

    如若侵权,请联系删除。

    本文只是将作品集合到起来,方便大家一起学习。
    资源集合已经放到 链接:https://pan.baidu.com/s/1sVvQE8uDujVxeKVVSoxyYw 密码:wslk

    Qt界面开发(各种控件以及图表)

    1.Qt简洁窗体

    源代码链接:点击打开链接

    2.QT漂亮界面

     

    源代码链接:点击打开链接

    3.音乐播放器界面

    源代码链接:点击打开链接

    4.六宫格界面

    源代码链接:点击打开链接

    5.漂亮通用界面

    源代码链接:点击打开链接

    6.净化设备管理

    源代码链接:点击打开链接

    7.树形界面通用图

    源代码链接:点击打开链接

    8.窗口主框架

    源代码链接:点击打开链接

    9.tcp文件传输

    源代码链接:点击打开链接

    10.综合组件的界面

    源代码链接:点击打开链接

    11.Qt动态圆形进度条

    源代码链接:点击打开链接

    12.动态绘制曲线

     

    源代码链接:点击打开链接

    13.二维码解析

    源代码链接:点击打开链接

    14.自定义UI演示

    源代码链接:点击打开链接

    15.Widget例子

    源代码链接:点击打开链接

    16.俄罗斯方块

    源代码链接:点击打开链接

    17.Qt360 界面

    源代码链接:点击打开链接

    18.正则表达式

    源代码链接:点击打开链接

    19.绘制(平滑与折线)曲线

    源代码链接:点击打开链接

    20.Tab选项界面

    源代码链接:点击打开链接

    21.十二宫格界面

    源代码链接:点击打开链接

    22.网络调试助手

    源代码链接:点击打开链接

    23.List树形列表界面

    源代码链接:点击打开链接

    24.Ping界面实现

    源代码链接:点击打开链接

    25.脉冲维修工具界面

    源代码链接:点击打开链接

    26.Qt个性时钟

    源代码链接:点击打开链接

    27.Qt漂亮日历

    源代码链接:点击打开链接

    28.Qt个性按钮

    源代码链接:点击打开链接

    29.Led数字显示

    源代码链接:点击打开链接

    30.多种组件界面

    源代码链接:点击打开链接

    31.英语词典

    源代码链接:点击打开链接

    32.绝对牛逼的计算器

    源代码链接:点击打开链接

    33.Led显示以及list列表

    源代码链接:点击打开链接

    34.Qt(动态数据模拟)曲线

    源代码链接:点击打开链接

    35.Tab飘逸界面

    源代码链接:点击打开链接

    36.滑动显示图片

    源代码链接:点击打开链接

    37.各种Chart例子

    源代码链接:点击打开链接

    38.背景图界面

    源代码链接:点击打开链接

    39.多种样式的进度条

    源代码链接:点击打开链接

    40.360UI完美界面

    源代码链接:点击打开链接

    41.360安防系统

     

    源代码链接:点击打开链接

    42.机器人聊天

    源代码链接:点击打开链接

    43.各种chart图表

    源代码链接:点击打开链接

    44.Qt图片预览(图形列表)

    源代码链接:点击打开链接

    45.动态显示文本的label

    源代码链接:点击打开链接

    46.Qt2048游戏

    源代码链接:点击打开链接

    47.Animation按钮

    源代码链接:点击打开链接

    48.模拟电量进度条

    源代码链接:点击打开链接

    49.网易云音乐界面

    源代码链接:点击打开链接

    50.多种样式日历

    源代码链接:点击打开链接

    51.myseria串口

    源代码链接:点击打开链接

    52.绘制魔法鱼儿

    源代码链接:点击打开链接

     

     

     

     

     

    展开全文
  • android 漂亮的UI界面 完整的界面设计

    万次下载 热门讨论 2020-07-30 23:33:23
    声明:这也是我学习时在网上下载的,鉴于分享精神,并且觉得很不错才上传...android 漂亮的UI界面 完整的界面设计 这是一个完整的UI设计,但是没写动作,这是一个公司程序员的公司任务设计,请别商用,要用请修改。。。
  • 地方

    主要面向想做出图形界面的C语言初学者

    C语言初学者开始都是在黑白控制台上开发一些小程序,实现一些小功能,因为基础的C语言可视化效果比较差,所展示的都是黑白的字符和数字,比较单调乏味。一些大学的计算机类专业学生,大一学习C语言,学习基础语法和算法,通过平台刷题提高自己编程能力,一般不专门学习图形化编程,期中或者期末可能会有开发一个小游戏或者小系统(如学生成绩管理系统、银行管理系统、日程管理系统等)的任务。这时如果在实现基本功能的情况下做出优美的图形界面,会比较出彩并且会有满满的成就感。

    一、环境准备

    操作系统:windows 10
    编译环境:VS 2017
    图形库:EasyX_20190415(beta)

    下载链接
    VS 2017: 微软官网
    EasyX图形库:EaxyX官网

    下面介绍一下EasyX:
    EasyX 是针对 C++ 的图形库,可以帮助 C语言或C++语言初学者快速上手图形和游戏编程,比如用编译环境和EasyX图形库可以轻松画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏,或者导入一张图片,可以练习图形学的各种算法,等等。
    如何安装:
    需要先下载安装好编译环境VS2017,然后再下载安装EasyX图形库,安装时选择安装在Visual C++2017目录下即可。
    安装截图

    二、程序运行截图

    欢迎界面
    在这里插入图片描述
    系统初始界面
    在这里插入图片描述
    学生端
    在这里插入图片描述
    教师端
    在这里插入图片描述

    三、部分源码展示

    下面是代码的头文件、宏定义、函数声明部分。完整源码请在下方获取

     /************************************************************************
    程序名:日程管理系统
    版本号:2.0
    开发者:符泽林
    程序功能:1)设计学生端口和教师端口,学生端学生自我管理,教师端教师监督管理
    		  2)注册、登录账号,修改密码
    		  3)添加、修改、删除、显示日程
    		  4)文件自动保存
    		  5) 精美界面,界面友好,交互性强
    		  6)系统会进行自动保存
    		  7)登录后退出需要重新登录
    ************************************************************************/
    
    /*对库函数的定义*/
    #include <graphics.h>      // 引用图形库头文件
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include <conio.h>
    #include<tchar.h>
    
    /*宏定义*/
    #define NUMBER 100//定义可容纳(学生/教师)的用户数量 
    #define MANAGELENGTH 30//定义事件长度(包含时间) 
    #define STRLENGTH 30//定义用户名长度
    #define NUMLENGTH 12//定义密码长度 
    
    /*定义图片*/
    IMAGE welcome;//欢迎界面
    IMAGE welcome_button;//ENTER按钮
    IMAGE startup;//初始界面
    IMAGE stu1;//学生端初始
    IMAGE stu1_return;
    IMAGE stu1_exit;
    IMAGE stu_register;//学生端:创建账户
    IMAGE stu_logon;//学生端:学生登录
    IMAGE stu_resetpassword;//学生端:修改密码
    IMAGE stu_schedulemanagement1;//学生端:日程管理界面1
    IMAGE stu_schedulemanagement2;//学生端:日程管理界面2
    IMAGE stu_schedulemanagement2_return;
    IMAGE stu_schedulemanagement2_exit;
    IMAGE teacher1;//教师端初始
    IMAGE teacher1_return;
    IMAGE teacher1_exit;
    IMAGE teacher_register;//教师端:创建账户
    IMAGE teacher_logon;//教师端:教师登录
    IMAGE teacher_resetpassword;//教师端:修改密码
    IMAGE teacher_schedulemanagement1;//教师端:日程管理界面1
    IMAGE teacher_schedulemanagement2;//教师端:日程管理界面2
    IMAGE teacher_schedulemanagement2_return;
    IMAGE teacher_schedulemanagement2_exit;
    IMAGE createschedule;//学生端:创建日程
    IMAGE resetschedule;//学生端:修改日程
    IMAGE finishedcondition;//学生端:完成状态
    IMAGE setstuschedule;//教师端:设定学生日程
    IMAGE resetstuschedule;//教师端:修改学生日程
    IMAGE checkfinishedcondition;//教师端:查看完成状态
    IMAGE end;//结束界面
    
    /*全局变量*/
    int nStudentNum = 0;//注册的学生编号(从0开始)(同时也代表着注册人数) 
    int nTeacherNum = 0;//注册的教师编号 (第一个注册的用户编号为0) 
    int nStuFlag = 0;//定义判断学生是否登录的标志变量
    int nTeacherFlag = 0;//定义判断教师是否登录的标志变量 
    int studentnum;//定义登录的学生编号
    int teachernum;//定义登录的教师编号
    
    /*定义学生结构体数组*/
    struct student
    {
    	wchar_t szName[STRLENGTH];//定义学生用户名
    	wchar_t password1[NUMLENGTH];//定义学生账户密码
    	wchar_t password2[NUMLENGTH];//定义学生二次输入密码
    	int nSerialNum;//定义学生序号(从1开始) 
    	int nManagement = 0;//定义学生的日程事件数  
    	wchar_t Management1[10][MANAGELENGTH];//定义存储该学生设定的初始时间字符数组      设定一个学生最多设定10个事件 
    	wchar_t Management2[10][MANAGELENGTH];//定义存储该学生设定的截止时间字符数组
    	wchar_t Management3[10][MANAGELENGTH];//定义存储该学生设定的日程内容字符数组
    	wchar_t FinishStatus[10][MANAGELENGTH];//定义每个学生设定的日程的完成状态 
    }stu[NUMBER];
    
    /*定义教师的结构体数组*/
    struct  teacher
    {
    	wchar_t szName[STRLENGTH];//定义教师用户名
    	wchar_t password1[NUMLENGTH];//定义教师账户密码
    	wchar_t password2[NUMLENGTH];//定义教师二次输入密码 
    	int nSerialNum;//定义老师序号(从1开始) 
    }teacher[NUMBER];
    
    /*函数声明***********************************************/
    
    /*欢迎界面函数*/
    void Welcome(FILE *fp);
    
    /*文件保存函数*/
    void SaveFile(FILE *fp);
    
    /*一级主菜单函数*/
    void Select_MainMenu(FILE *fp);
    
    /*二级菜单函数*/
    
    //二级菜单学生端目录显示
    void OutputStu_SecondMenu(FILE *fp);
    //二级菜单教师端目录显示
    void OutputTeacher_SecondMenu(FILE *fp);
    //二级菜单:学生创建账户 
    void Stu_Register(FILE *fp);
    // 二级菜单:学生登录
    void Stu_Logon();
    //二级菜单:学生修改密码
    void Stu_ResetPassword(FILE *fp);
    //二级菜单:学生日程管理
    void Stu_ScheduleManagement(FILE *fp);
    //二级菜单:教师创建账户
    void Teacher_Register(FILE *fp);
    //二级菜单:教师登录
    void Teacher_Logon();
    //二级菜单:教师修改密码
    void Teacher_ResetPassword(FILE *fp);
    //二级菜单:教师对学生日程管理
    void Teacher_ScheduleManagement(FILE *fp);
    
    /*二级菜单结束*/
    
    /*三级菜单*/
    
    //三级菜单:新建日程 
    void CreateSchedule(FILE *fp);
    //三级菜单:修改日程
    void ResetSchedule(FILE *fp);
    //三级菜单:完成状态
    void FinishedCondition(FILE *fp);
    //三级菜单:设定学生日程
    void SetStuSchedule(FILE *fp);
    //三级菜单:修改学生日程
    void ResetStuSchedule(FILE *fp);
    //三级菜单:查看学生完成状态
    void CheckFinishedCondition();
    
    /*三级菜单结束*/
    
    /*函数声明结束********************************************/
    

    四、完整文件

    日程管理系统
    提取码:3x07
    说明:图片都是用ps自己制作的,切不可更改图片命名,否则会导致程序无法运行,因为图片命名和代码要保持一致。

    五、要点

    1、创建项目:新建-项目-空项目-右键“源文件”-添加-新建项-C++文件
    2、编码字符集:unicode字符集
    在这里插入图片描述
    3.将图片资源直接导入到所命名的文件夹中,注意不要将图片打包文件夹后再放入,要直接将图片导入对应文件夹。
    4.程序中要多次用到图形库的函数,建议刚接触的初学者查看EasyX安装时附带的官方帮助文档,也可以参考我分享的源代码。但是考虑到帮助文档内容较少,对函数的用法介绍较少,下面分享一个关于EasyX图形库详细函数用法介绍的文档。
    EasyX函数详细介绍文档
    提取码:6wdk
    5.解决方案配置有两种选择:debug和release,程序编译后会生成对应的文件,如debug文件夹,将图片资源导入该文件夹就可以直接运行文件夹内的可执行文件,否则无法运行,release同理。

    六、最后的话

    本文不谈高深的技术,只介绍了最基础的基于EasyX图形库的C语言图形化编程,比较简单适合初学者,但是学好了同样可以开发出非常棒的程序。当时刚接触C语言和图形界面时不知从何下手,后来发现EasyX这个简单好用的库,没有找到很多详细的文章和博客。自己看EaxyX帮助文档和一些源码学到了一些东西,学了ps做了几十张图片,最后写出了这个日程管理系统,于是决定将我学到的东西和写的程序分享给大家,没有多好,希望给大家一个参考,衷心的希望本文可以对大家有所帮助,欢迎大家留言呀。

    展开全文
  • C++界面

    千次阅读 2019-08-03 11:23:23
     ...Xtreme ToolkitPro v15.0.1,Skin++,等界面库,以及一些网友自己写的界面库,开始对于C++软件界面美化有了一点点的心得。不敢藏私,希望和一些新手朋友们分享交流。     一...

            刚开始用C++做界面的时候,根本不知道怎么用简陋的MFC控件做出比较美观的界面,后来就开始逐渐接触到BCG  Xtreme ToolkitPro v15.0.1,Skin++,等界面库,以及一些网友自己写的界面库,开始对于C++软件界面美化有了一点点的心得。不敢藏私,希望和一些新手朋友们分享交流。


        一.  开源C++界面库

      

    1.RingSdk

        Ringsdk是CSDN上一个前辈自己写的界面库,这个界面库很轻而易举实现QQ2009的界面效果。链接见 

      http://blog.csdn.net/ringphone/article/details/2911244   貌似Ringsdk和MFC无法进行交互,但是 RingSdk其中有很多的图形处理的代码都非常有参考价值。


    2.redui的官方网站http://www.redui.org 已经打不开了。官方QQ群是 40729296 

    CSDN地址是 
    http://blog.csdn.net/jameshooo/article/details/6677272

    这是官方的说明

    REDUI,又名REDirectUI,全称是Rendering Engine for DirectUI,是一款基于XML描述的 DirectUI 渲染引擎,能将“控件”的交互和渲染过程分解成多种独立的要素,包括布局、视觉效果、样式、UI自动化、滤镜、脚本、事件、3D场景、3D模型、通用动画等。通过这些要素的排列组合,可以呈现出各种不同效果的控件,甚至能在XML中直接自定义控件类型。支持2D/3D无缝融合。
    • REDUI支持GDI/GDI+/DirectDraw/D3D等渲染方式,并有支持OPENGL/ES的愿望


    3.Duilib 这个就比较大名鼎鼎了,不用多说了吧。包括华为网盘在内的很多业内企业都在用这个界面库。我用Duilib做了一个小型的界面。贴出来献丑一个。



    4.WGI-1.0.7-Demo-Project-for-windows 。。额。。时间太长,忘记了这个代码是什么,姑且先忽略它。


    5.cj60lib 这个玩过Gh0st3.6木马的人都熟悉,是一款对MFC进行拓展的界面库

    6.金山界面库 这个就不赘述了,可以直接上金山的论坛找源代码和资料

    7.skinTK_V0.20 一款类似于Skin++的开源界面库

    8.FreeCL_Skin2.3 一款不错的控件库 扩展了常用的MFC控件 。  这个是FreeCL_Skin提供的一个效果实例。



    9.GuiLib1.5 一个老外写的界面库 没有用过,没有调查,就没有发言权。大家自行百度。


    10.基于3D的界面库 MangoGUI_V0.1.5

    MangoGUI是猫仔在DXUT基础上修改得来的一个开源GUI系统。

    目前来说基本上继承了DXUT里面绝大多数的功能和改进了使用方式,让DX学习爱好者更容易去使用GUI系统。

    如果你也是一位对GUI有兴趣的同学,非常欢迎你一同来参与到MangoGUI的设计当中来!

    作者博客

    http://m9551.blog.sohu.com/


    11.基于Skia的directui库metalbone

    代码托管地址

    http://code.google.com/p/metalbone/

    官方说明

    MetalBone是一个C++ DirectUI库。接口、命名等借鉴Qt,而并非使用Windows风格。

    MetalBone的特点是,使用CSS来定制样式(如果没有CSS的话,则什么也不显示,lol)。目前可以使用Direct2D或Google Skia来绘制界面。MetalBone使用的是 WWM协议(基于LGPL)


    12.SonicUI2011

    效果比较不错的一款皮肤库

    作者CSDN地址是 

    http://my.csdn.net/akof1314


    13 基于OpenGl的界面库 beGUI-0.1.3-src

    代码托管地址

     http://code.google.com/p/begui/


                   二 未开源或商业界面库



    1.Flash4UI 

     看命名就知道是将Flash嵌入到UI中。

    官方网站是  http://www.flash4ui.com/

    效果图片



    2.bolt 迅雷7界面引擎

    迅雷界面引擎,这个用过迅雷下载和迅雷看看的就有体会了,界面的确是做的非常的赞。而且流畅,CPU占用和内存各种都很棒。采用了脚本交互的方式,脚本语言采用了Lua.可惜的是迅雷只开放了接口SDK给个人使用。

    官方网址 http://bolt.xunlei.com/


    3.clayui

    百度百科说明   clayui是一个采用纯C++编写的界面框架,可以很方便的移植到各种系统上。现在支持的系统包括android,windows,wince,linux。clayui的特点是能实现各种2D,3D动画,一些WPF,FLEX才能实现的界面效果,通过clayui可以很方便的实现。 clayui的底层渲染支持纯软件渲染,d3d,opengl es硬件加速渲染,您可以根据自身的需求选择合适的渲染方式,使您界面的用户体验达到最佳效果

    效果


    4.DSkinLite

    官方网址  http://www.uieasy.cn/dskinlite/

    官方Demo



    5.libuiDK

    官方说明:LibUIDK是国际上顶尖的专业开发Windows平台下图形用户界面的开发包,也是国内第一款商业的高级界面开发工具。该开发包基于Microsoft的MFC库。使用此开发工具包可轻易把美工制作的精美界面用Visual C++实现,由于LibUIDK采用所见即所得的方式创建产品界面,所以极大的提高了产品的开发速度,并大大增强图形用户界面(GUI)的亲和力。LibUIDK还可以使您的软件轻松具有当今流行的换肤功能,以提高产品的竞争力。

    官方网站

    http://www.iuishop.com/index.asp

    实例



    6. SiteUi   SkinSE  都有官方网站。就不继续搬砖的工作了。


    7.(未开源)上海勇进UIPower

    这个比较牛逼。一款界面库就是大几百万的。老总阙海忠还亲自录了20集的界面库相关的视频

    官方网站 http://www.uipower.com/

    这是老阙的视频。



    8.炫彩界面库

    炫彩界面库貌似是私人开发的一个界面库,可以用C++.c#易语言等来开发。炫彩库的作者貌似是湖北襄阳人哟。

    官方网站 http://www.xcgui.com/


    9.魔方界面库

    官方网站 http://www.muilib.com/

    MuiLib(Magic UI Library)Windows高级界面开发库是在国内首家免费开源的DuiLib界面开发库基础上经过针对性的扩展而发展起来的,他继承了DuiLib高度自由灵活的特点,并吸收了其他界面库的一些优点,针对Windows层窗口按像素透明技术而重点优化后形成的一个优秀界面开发库,是一个使用纯C++调用Windows API的开发库,无任何其他第三方依赖框架,您可以使用其提供的各种高级控件来创建更加炫酷的用户界面


    10 XtremeToolkit

    Codejock 公司出品的一款界面库。应用也是比较广泛的。在2013版的大灰狼远程操控中就采用了这款界面库。


    11.Sharpui

    代码托管地址  https://github.com/china520/sharpui

    Sharpui是居于现在流行的DUI思想的一套界面库,可以方便实现半透明和各种界面效果,采用纯c++实现,分为引擎和控件两个部分,这两个部分采用动态库的形式提供,引擎部分处理了事件、资源、渲染、控制逻辑,同时提供了各种应用层面控件的实现基类,包括:Visual、Element、FrameworkElement、Control、ContentControl、Window、Panel、Popup,这些类封装了基础控件的实现细则,所有用户实现的控件都必须继承自这些类,对于需要呈现的控件必须继承至FrameworkElement。
    控件部分提供的所有控件均采用DUI方式实现、分层绘制,实现各种常用的布局控件,可灵活实现界面的自动布局;Sharpui本身所有数据结构采用原生实现,内存自动管理,不依赖于std的任何容器,使得库的使用更加独立、编译更加简单,使用VS任意一个版本编译都可以用在其它版本里,不需要担心由于std版本原因而产生编译问题。



    以上都是我在工作和个人业余时间收集积累的开源或商业界面库,这些界面库各有各的特色和侧重点,也有不同的换肤思想,如果要用在项目中还是要进行适当的增删整改。

    由于个人能力水平见识有限,也有些大神的作品没有被收录其中。表示遗憾。




    /**************************************************Witch_Soya***********************************************************/

    /**************************************************2013年9月3日15:55:18***********************************************/

    展开全文
  • 一篇文章教会你,在MATLAB中创建图形用户界面GUI

    千次阅读 多人点赞 2019-05-21 19:09:27
    GUI (Graphical User Interface)是图形用户接口,采用图形方式显示的计算机操作用户界面,可以通过GUI更好地进行人机交互操作。 GUIDE(Graphical User Interface Development Environment)是MATLAB的图形用户接口...
  • 教你用Python写界面

    万次阅读 多人点赞 2018-11-18 18:58:06
    作为Pyhon开发者,你迟早都会碰到图形用户界面(GUI)应用开发任务,这时候我们就需要一些界面库来帮助我们快速搭建界面,python的界面库很多,我认识的并不多,这里只列出几种我认识的 1.tkinter Tkinter(也叫Tk...
  • 索引本章最佳实践正式开始编辑准备界面UI实体编写准备界面UI逻辑类UITankItem类UIReady类进入下一流程 本章最佳实践 UI界面管理器。 正式开始 在前几章我们已经完成了准备界面所需要的大部分内容,比如坦克、武器...
  • Python界面 可视化开发(python3+PyQt5+Qt Designer)

    千次阅读 多人点赞 2019-11-18 09:33:14
    以前制作一个Python窗体界面,我都是用GUI窗口视窗设计的模块Tkinter一点一点敲出来的,今天朋友问我有没有Python窗体的设计工具,“用鼠标拖拖”就能完成窗体设计,我查了查相关资料,果然有一款好用的工具——Qt ...
  • 在linux下图形界面和命令行界面的切换我估计好多喜欢用linux系统的人都不太会遇到这个问题,因为linux图形界面会占用一些系统资源并且也没那么“好用”。1. 图形界面和命令行界面的切换如果linux系统安装了“全套”...
  • Qt-多界面编程(界面切换)

    万次阅读 多人点赞 2018-10-26 11:11:41
    在Qt编程中经常遇到多个界面之间的切换, 比如从登录界面跳转到主界面, 主界面跳转到设置界面,在返回到主界面 下面更加这个流程实现一个例子: 1.在QtCreator集成开发环境上创建MultiInterface工程如下(创建...
  • 现有2个项目,taskA、...taskA负责调用taskB中指定的界面。 taskB中有3个界面,a、b、c,每个界面显示它所在的task id。 SingleTask: 其中b界面被声明为SingleTask。 先运行taskB,显示a界面,由a界面调用
  • centos 7 启动与切换图形界面

    万次阅读 多人点赞 2018-11-03 20:37:39
    安装图形界面 默认情况下是不会安装图形界面的,所以需要自己手动安装,步骤如下: 开启系统,以root身份进入 安装X(X Window System),命令如下: yum groupinstall "X Window System" 其中大约有...
  • 虚拟机Linux图形界面和命令界面切换

    万次阅读 2018-08-07 15:38:42
    --linux切换图形界面alt+ctrl + F1-F5 更改ubuntu鼠标移出快捷键alt + ctrl   ctrl + alt + F3 编辑模式 ctrl + alt + F1 图形界面模式
  • CentOS7图形界面与命令行界面切换

    万次阅读 2018-03-01 10:54:56
    在图形界面使用 ctrl+alt+F2切换到dos界面 dos界面 ctrl+alt+F2切换回图形界面在命令上 输入 init 3 命令 切换到dos界面 输入 init 5命令 切换到图形界面 如果想系统默认以某种方式启动, 使用systemd创建符号...
  • Linux之RedHat 7 图形界面版安装

    万次阅读 2018-09-12 11:33:02
    若分配1G以下内存则只能安装最小化版(无图形界面) 选择带界面的系统安装 安装位置默认分区就行 需设置root密码 等待安装 这里需要输入搜索才能继续,点界面是没用的 ...
  • Qt 多界面来回切换的问题以及Qt界面关闭与销毁

    万次阅读 多人点赞 2018-04-27 19:40:11
    Qt 中我们经常会用到好几个界面,那么这几个界面之间来回切换就是一个经常出现的问题。之前我也总是被这个问题困扰,现在写一个样例程序当作一种解决方案,希望能给大家启发。 首先我定义了两个界面,一个主界面,...
  • ubuntu 18 命令行和图形界面切换

    万次阅读 2018-06-16 23:48:05
    图形界面切换到命令行:Ctrl+Fn+Alt+F3(F4/F5/F6)命令行界面切换回图形界面:Ctrl+Fn+Alt+F2(返回到原来的图形界面)或Ctrl+Fn+Alt+F1(这是直接返回图形界面的锁屏状态)当然你还可以尝试一下,如果你不按Fn,...
1 2 3 4 5 ... 20
收藏数 2,608,162
精华内容 1,043,264
关键字:

界面