第二十八篇 -- 写一个简陋的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 ...
随机推荐
- 打开黑盒:从 MySQL架构设计出发,看它是如何执行一条 SQL语句的
1.把MySQL当个黑盒子一样执行SQL语句 我们的系统采用数据库连接池的方式去并发访问数据库,然后数据库自己其实也会维护一个连接池,其中管理了各种系统跟这台数据库服务器建立的所有连接 当我们的系统只 ...
- 「10.17-10.18」liu_runda’s模拟
暂咕 $day1$ A. 位运算 分类讨论,贡献分离. B. 集合论 维护类似时间戳的东西 C. 连连看 考场思路太局限了,考虑容斥. 我们可以看出两个方块能作出贡献,实际上是一个极大联通块(白块)所 ...
- NOIP模拟测试39,思维禁锢专场「工业题·玄学题·卡常题」
工业题 题解 抱歉,题解没时间写了 代码 #include<bits/stdc++.h> using namespace std; #define ll long long #define ...
- 用transform和rem哪个好
个人觉得电脑端的用transform好,毕竟电脑端的项目基本都会固定屏幕比列,16:9.28:9.32:9的 一个固定的设计稿就能很好的适配. 移动端用rem比较好,移动端的屏幕比列太杂,使用rem自 ...
- GitHub Desktop的使用,创建项目、上传文件,设置忽略文件
下载登陆之后 新建项目File--第一个New repository 然后输入项目名称,选择项目文件夹,最后点Creata repository创建项目 这只是在本地建了项目. 项目文件夹中有其他文件 ...
- 2021年Wordpress手把手教你做个独立站——部署篇
2021年Woocommerce电商主题的安装部署教程 Woocommerce是一个Wordpress的一个流行的电商插件.完成Wordpress的安装即已完成80%.剩下的便是去寻找一款合适的自己喜 ...
- Kubernetes的认证机制
1.了解认证机制 API服务器可以配置一到多个认证的插件(授权插件同样也可以).API服务器接收到的请求会经过一个认证插件的列表,列表中的每个插件都可以检查这个请求和尝试确定谁在发送这个请求.列表中的 ...
- Mybatis学习(1)开发环境搭建
什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML ...
- Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date'
我的情况是:在applicationContext.xml文件中配置 <bean id="member" class="com.entity.Member" ...
- APP 抓包(应用层)
0x01 前言: app抓包是逆向协议的前提,也是一个爬虫工程师的基本要求,最近发现这块知识非常欠缺就抓紧补补了(我太菜了) 然后接下来是通过vpn将流量导出到抓包软件的方式,而不是通过wifi设置代 ...