第二十八篇 -- 写一个简陋的WIFI服务器界面
效果图:

Dlg.cpp
// WIFIWMITestDlg.cpp : implementation file
// #include "stdafx.h"
#include "WIFIWMITest.h"
#include "WIFIWMITestDlg.h"
#include "afxdialogex.h" #ifdef _DEBUG
#define new DEBUG_NEW
#endif // CAboutDlg dialog used for App About class CAboutDlg : public CDialogEx
{
public:
CAboutDlg(); // Dialog Data
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation
protected:
DECLARE_MESSAGE_MAP()
}; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
} void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
} BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP() // CWIFIWMITestDlg dialog CWIFIWMITestDlg::CWIFIWMITestDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_WIFIWMITEST_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
} void CWIFIWMITestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATIC8, Icon_Static);
DDX_Control(pDX, IDC_STATIC9, Icon_Static_Green);
DDX_Control(pDX, IDC_STATIC1, Server_Status);
} BEGIN_MESSAGE_MAP(CWIFIWMITestDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(ID_SERVER_START, &CWIFIWMITestDlg::OnServerStart)
ON_COMMAND(ID_SERVER_STOP, &CWIFIWMITestDlg::OnServerStop)
ON_UPDATE_COMMAND_UI(ID_SERVER_STOP, &CWIFIWMITestDlg::OnUpdateServerStop)
END_MESSAGE_MAP() // CWIFIWMITestDlg message handlers BOOL CWIFIWMITestDlg::OnInitDialog()
{
CDialogEx::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here
//添加menu菜单
m_Menu.LoadMenu(IDR_MENU1); // IDR_MENU1
SetMenu(&m_Menu);
//使菜单变灰
m_Menu.GetSubMenu(0)->EnableMenuItem(ID_SERVER_STOP, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); //添加红绿灰三种图标
DWORD dwStyle = WS_VISIBLE | WS_CHILD | SS_ICON;
::SetWindowLong(Icon_Static.m_hWnd, GWL_STYLE, dwStyle);
::SetWindowLong(Icon_Static_Green.m_hWnd, GWL_STYLE, dwStyle);
//HICON hIcon = ::LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON1));
//((CStatic *)GetDlgItem(IDC_STATIC5))->SetIcon(hIcon);
HICON hIcon_red = (HICON)::LoadImage(AfxGetInstanceHandle(),
1 ? MAKEINTRESOURCE(IDI_ICON1) : MAKEINTRESOURCE(IDI_ICON2),
IMAGE_ICON, 16, 16, LR_SHARED);
HICON hIcon_gray = (HICON)::LoadImage(AfxGetInstanceHandle(),
0 ? MAKEINTRESOURCE(IDI_ICON1) : MAKEINTRESOURCE(IDI_ICON3),
IMAGE_ICON, 16, 16, LR_SHARED);
((CStatic *)GetDlgItem(IDC_STATIC8))->SetIcon(hIcon_red);
((CStatic *)GetDlgItem(IDC_STATIC9))->SetIcon(hIcon_gray); return TRUE; // return TRUE unless you set the focus to a control
} void CWIFIWMITestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
} // If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework. void CWIFIWMITestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
} // The system calls this function to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CWIFIWMITestDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
} void CWIFIWMITestDlg::OnServerStart()
{
// TODO: Add your command handler code here
CWnd* pWnd = GetDlgItem(IDC_STATIC1);
pWnd->SetWindowText(_T(" Server is online!")); HICON hIcon_green = (HICON)::LoadImage(AfxGetInstanceHandle(),
0 ? MAKEINTRESOURCE(IDI_ICON1) : MAKEINTRESOURCE(IDI_ICON2),
IMAGE_ICON, 16, 16, LR_SHARED);
((CStatic *)GetDlgItem(IDC_STATIC9))->SetIcon(hIcon_green); HICON hIcon_gray = (HICON)::LoadImage(AfxGetInstanceHandle(),
0 ? MAKEINTRESOURCE(IDI_ICON1) : MAKEINTRESOURCE(IDI_ICON3),
IMAGE_ICON, 16, 16, LR_SHARED);
((CStatic *)GetDlgItem(IDC_STATIC8))->SetIcon(hIcon_gray); //恢复菜单变亮
m_Menu.GetSubMenu(0)->EnableMenuItem(ID_SERVER_STOP, MF_BYCOMMAND | MF_ENABLED);
//使菜单变灰
m_Menu.GetSubMenu(0)->EnableMenuItem(ID_SERVER_START, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
//MessageBox((LPCTSTR)"Server Ready!");
} void CWIFIWMITestDlg::OnServerStop()
{
// TODO: Add your command handler code here
CWnd* pWnd = GetDlgItem(IDC_STATIC1);
pWnd->SetWindowText(_T(" Server is offline!")); HICON hIcon_red = (HICON)::LoadImage(AfxGetInstanceHandle(),
1 ? MAKEINTRESOURCE(IDI_ICON1) : MAKEINTRESOURCE(IDI_ICON2),
IMAGE_ICON, 16, 16, LR_SHARED);
((CStatic *)GetDlgItem(IDC_STATIC8))->SetIcon(hIcon_red); HICON hIcon_gray = (HICON)::LoadImage(AfxGetInstanceHandle(),
0 ? MAKEINTRESOURCE(IDI_ICON1) : MAKEINTRESOURCE(IDI_ICON3),
IMAGE_ICON, 16, 16, LR_SHARED);
((CStatic *)GetDlgItem(IDC_STATIC9))->SetIcon(hIcon_gray); //恢复菜单变亮
m_Menu.GetSubMenu(0)->EnableMenuItem(ID_SERVER_START, MF_BYCOMMAND | MF_ENABLED);
//使菜单变灰
m_Menu.GetSubMenu(0)->EnableMenuItem(ID_SERVER_STOP, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
} void CWIFIWMITestDlg::OnUpdateServerStop(CCmdUI *pCmdUI)
{
// TODO: Add your command update UI handler code here
}
Dlg.h
// WIFIWMITestDlg.h : header file
// #pragma once // CWIFIWMITestDlg dialog
class CWIFIWMITestDlg : public CDialogEx
{
// Construction
public:
CWIFIWMITestDlg(CWnd* pParent = nullptr); // standard constructor // Dialog Data
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_WIFIWMITEST_DIALOG };
#endif protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation
protected:
HICON m_hIcon; // Generated message map functions
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP() public:
CMenu m_Menu;
afx_msg void OnServerStart();
CStatic Icon_Static;
CStatic Icon_Static_Green;
CStatic Server_Status;
afx_msg void OnServerStop();
afx_msg void OnUpdateServerStop(CCmdUI *pCmdUI);
};
菜单的模样

分隔符这个问题,看下面

将下拉菜单要添加分隔符的地方,把Separator设置为True就行了。
第二十八篇 -- 写一个简陋的WIFI服务器界面的更多相关文章
- Android UI开发第二十八篇——Fragment中使用左右滑动菜单
Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...
- Python之路【第二十八篇】:django视图层、模块层
1.视图函数 文件在view_demo 一个视图函数简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XM ...
- Python之路【第二十八篇】:生成器与迭代器
#!/usr/bin/env python # -*- coding:utf-8 -*- #只要函数的代码里面出现了yield关键字,这个函数就不再是一个普通的函数了,叫做生成器函数 #执行生成器函数 ...
- Python之路(第二十八篇) 面向对象进阶:类的装饰器、元类
一.类的装饰器 类作为一个对象,也可以被装饰. 例子 def wrap(obj): print("装饰器-----") obj.x = 1 obj.y = 3 obj.z = 5 ...
- 第二十八篇:SOUI中自定义控件开发过程
在SOUI中已经提供了大部分常用的控件,但是内置控件不可能满足用户的所有要求,因此一个真实的应用少不得还要做一些自定义控件. 学习一个新东西,最简单的办法就是依葫芦画瓢.事实上在SOUI系统中内置控件 ...
- 第二十八篇、自定义的UITableViewCell上有图片需要显示,要求网络网络状态为WiFi时,显示图片高清图;网络状态为蜂窝移动网络时,显示图片缩略图
1)SDWebImage会自动帮助开发者缓存图片(包括内存缓存,沙盒缓存),所以我们需要设置用户在WiFi环境下下载的高清图,下次在蜂窝网络状态下打开应用也应显示高清图,而不是去下载缩略图. 2)许多 ...
- 第二十八篇-Fragment静态用法
效果图: 首先,先大致布局成这个形状 看动画中,横看分为两个区域,所以整体是一个水平排列 设置外层LinearLayout的参数 android:orientation="horizonta ...
- 第二十八篇 玩转数据结构——堆(Heap)和有优先队列(Priority Queue)
1.. 优先队列(Priority Queue) 优先队列与普通队列的区别:普通队列遵循先进先出的原则:优先队列的出队顺序与入队顺序无关,与优先级相关. 优先队列可以使用队列的接口,只是在 ...
- 第二十八篇:关于node.js连接数据库
好家伙,这个不难,但是也不简单. $ cnpm install mysql 教程里是带美元符的,但是我打的时候加上美元符用不了,所以我就没用美元符了,一样能行. 还有,淘宝镜像,yyds, var m ...
随机推荐
- 腾讯TencentOS 十年云原生的迭代演进之路
导语 TencentOS Server (又名 Tencent Linux 简称 Tlinux) 是腾讯针对云的场景研发的 Linux 操作系统,提供了专门的功能特性和性能优化,为云服务器实例中的应用 ...
- 生成树协议(STP)
一.交换网络环路的产生 1.广播风暴的形成 2.多帧复制 3.MAC地址表紊乱 二.STP简介 STP-Spanning Tree Protocol(生成树协议) 逻辑上断开环路,防止广播风暴的产生 ...
- 史上最详细的Air7xx驱动安装教程
由于Air7xx系列4G模块需要安装USB驱动,但是很多开发者对USB驱动的安装方法不是十分了解,所以经常出现问题,导致安装失败.特书此文,手把手教你装USB驱动. 第一步 从官网下载最新的驱动程序 ...
- 【题解】逐个击破 luogu2700
题目 题目描述: 现在有N个城市,其中K个被敌方军团占领了,N个城市间有N-1条公路相连,破坏其中某条公路的代价是已知的. 现在,告诉你K个敌方军团所在的城市,以及所有公路破坏的代价,请你算出花费最少 ...
- Android一个炫酷的树状图组织架构图开源控件实现过程
Android一个炫酷的树状图组织架构图开源控件 文章目录 [1 简介] [2 效果展示] [3 使用步骤] [4 实现基本布局流程] [5 实现自由放缩及拖动] [6 实现添加删除及节点动画] [7 ...
- 服务器硬件和RAID配置
服务器 硬件和RAID配置 目录 一.RAID 磁盘阵列介绍 1.1.RAID 0(条带化存储) 1.2.RAID 1(镜像存储) 1.3.RAID 5 1.4.RAID 6 1.5.RAID 1+0 ...
- 即时通信之 SignalR
即时通信在日常的web开发场景中经常使用,本篇主要回顾一下SignalR的实现原理和通过例子说明如何在.NET Core 中使用. SingnalR 应用 需要从服务器进行高频更新的应用程序.例如游戏 ...
- Redis之集群
Redis Cluster是 Redis的分布式解决方案,在3.0版本正式推出,有效地解决了Redis分布式方面的需求.当遇到单机内存.并发.流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的 ...
- layui laydate 设置日期格式 最大值等
laydate.render({ elem: "#jhsj", format: 'yyyy-MM', type: 'month', //显示月份 year 显示到年 max : & ...
- Murmur3 Hash 128位java和C#方法
java调用com.google.guava 引入依赖 <dependency> <groupId>com.google.guava</groupId> <a ...