第二十八篇 -- 写一个简陋的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 ...
随机推荐
- 【NX二次开发】三点画圆,三角形外心,已知三点求圆心
已知P1.P2.P3,求点O 算法:三点不在一条直线上时,通过连接任意两点,作中垂线.任意两条中垂线的交点是圆心.
- 听说你还不知道Spring是如何解决循环依赖问题的?
Spring如何解决的循环依赖,是近两年流行起来的一道Java面试题. 其实笔者本人对这类框架源码题还是持一定的怀疑态度的. 如果笔者作为面试官,可能会问一些诸如"如果注入的属性为null, ...
- Linux中测试网络命令
ping IP -t 是持续性查看网络状态
- C#串口通信——DtrEnable 和RtsEnable 两个属性
转自 http://www.cnblogs.com/hengbo/archive/2011/12/19/2293272.html 在开发中有些串口设备需要串口供电(本人在开发门禁系统时,对起落杆进行控 ...
- .net core 支付宝,微信支付 一
源码: https://github.com/aspros-luo/Qwerty.Payment/tree/develop 支付宝支付:参考支付宝sdk及文档,https://docs.open.al ...
- ECS实例中的应用偶尔出现丢包现象并且内核日志(dmesg)存在“kernel: nf_conntrack: table full, dropping packet”的报错信息
问题描述 连接ECS实例中的应用时偶尔出现丢包现象.经排查,ECS实例的外围网络正常,但内核日志(dmesg)中存在"kernel: nf_conntrack: table full, dr ...
- Docker搭建mysql:5.7版本数据库
搭建MySQL: 1.启动测试mysql,拷贝容器内配置文件到宿主机 mkdr -P /server/docker/mysql/{data,conf} docker run -e MYSQL_ROOT ...
- CRM的职能和主要构成模块探索
CRM客户管理系统是随着互联网的快速发展和信息技术的进步而发展起来的,是企业管理客户关系.优化业务流程的首选.客户关系管理可以存储企业获得的客户信息,方便业务人员随时查看和了解客户需求:客户关系管理可 ...
- iOS导入其他APP下载的文件(用其他应用打开)
今天给自己的APP新增了一个小功能 可以打开iOS其他APPTXT 文件,一个很小的功能,做阅读APP的小伙伴不要错过. 附上APP地址: 一阅阅读 有想看小说的小伙伴可以试下 支持换源 支持自定义书 ...
- CentOS-Docker搭建Nacos-v1.1.4(单点)
通用属性配置(v1.1.4) name description option MODE cluster模式/standalone模式 cluster/standalone default cluste ...