diff --git a/CSMQTT/CSMQTT.cpp b/CSMQTT/CSMQTT.cpp new file mode 100644 index 0000000..7b6586d --- /dev/null +++ b/CSMQTT/CSMQTT.cpp @@ -0,0 +1,107 @@ + +// CSMQTT.cpp: 定义应用程序的类行为。 +// + +#include "pch.h" +#include "framework.h" +#include "CSMQTT.h" +#include "CSMQTTDlg.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// CCSMQTTApp + +BEGIN_MESSAGE_MAP(CCSMQTTApp, CWinApp) + ON_COMMAND(ID_HELP, &CWinApp::OnHelp) +END_MESSAGE_MAP() + + +// CCSMQTTApp 构造 + +CCSMQTTApp::CCSMQTTApp() +{ + // 支持重新启动管理器 + m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; + + // TODO: 在此处添加构造代码, + // 将所有重要的初始化放置在 InitInstance 中 +} + + +// 唯一的 CCSMQTTApp 对象 + +CCSMQTTApp theApp; + + +// CCSMQTTApp 初始化 + +BOOL CCSMQTTApp::InitInstance() +{ + // 如果一个运行在 Windows XP 上的应用程序清单指定要 + // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, + //则需要 InitCommonControlsEx()。 否则,将无法创建窗口。 + INITCOMMONCONTROLSEX InitCtrls; + InitCtrls.dwSize = sizeof(InitCtrls); + // 将它设置为包括所有要在应用程序中使用的 + // 公共控件类。 + InitCtrls.dwICC = ICC_WIN95_CLASSES; + InitCommonControlsEx(&InitCtrls); + + CWinApp::InitInstance(); + + + AfxEnableControlContainer(); + + // 创建 shell 管理器,以防对话框包含 + // 任何 shell 树视图控件或 shell 列表视图控件。 + CShellManager *pShellManager = new CShellManager; + + // 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题 + CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); + + // 标准初始化 + // 如果未使用这些功能并希望减小 + // 最终可执行文件的大小,则应移除下列 + // 不需要的特定初始化例程 + // 更改用于存储设置的注册表项 + // TODO: 应适当修改该字符串, + // 例如修改为公司或组织名 + SetRegistryKey(_T("应用程序向导生成的本地应用程序")); + + CCSMQTTDlg dlg; + m_pMainWnd = &dlg; + INT_PTR nResponse = dlg.DoModal(); + if (nResponse == IDOK) + { + // TODO: 在此放置处理何时用 + // “确定”来关闭对话框的代码 + } + else if (nResponse == IDCANCEL) + { + // TODO: 在此放置处理何时用 + // “取消”来关闭对话框的代码 + } + else if (nResponse == -1) + { + TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n"); + TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n"); + } + + // 删除上面创建的 shell 管理器。 + if (pShellManager != nullptr) + { + delete pShellManager; + } + +#if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS) + ControlBarCleanUp(); +#endif + + // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, + // 而不是启动应用程序的消息泵。 + return FALSE; +} + diff --git a/CSMQTT/CSMQTT.h b/CSMQTT/CSMQTT.h new file mode 100644 index 0000000..edb80b1 --- /dev/null +++ b/CSMQTT/CSMQTT.h @@ -0,0 +1,32 @@ + +// CSMQTT.h: PROJECT_NAME 应用程序的主头文件 +// + +#pragma once + +#ifndef __AFXWIN_H__ + #error "在包含此文件之前包含 'pch.h' 以生成 PCH" +#endif + +#include "resource.h" // 主符号 + + +// CCSMQTTApp: +// 有关此类的实现,请参阅 CSMQTT.cpp +// + +class CCSMQTTApp : public CWinApp +{ +public: + CCSMQTTApp(); + +// 重写 +public: + virtual BOOL InitInstance(); + +// 实现 + + DECLARE_MESSAGE_MAP() +}; + +extern CCSMQTTApp theApp; diff --git a/CSMQTT/CSMQTT.rc b/CSMQTT/CSMQTT.rc new file mode 100644 index 0000000..98b7b4e Binary files /dev/null and b/CSMQTT/CSMQTT.rc differ diff --git a/CSMQTT/CSMQTT.vcxproj b/CSMQTT/CSMQTT.vcxproj new file mode 100644 index 0000000..aa95ac1 --- /dev/null +++ b/CSMQTT/CSMQTT.vcxproj @@ -0,0 +1,215 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <VCProjectVersion>17.0</VCProjectVersion> + <ProjectGuid>{C76E066B-BE29-415E-8975-0107C4191EEF}</ProjectGuid> + <Keyword>MFCProj</Keyword> + <RootNamespace>CSMQTT</RootNamespace> + <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v143</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + <UseOfMfc>Static</UseOfMfc> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v143</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + <UseOfMfc>Static</UseOfMfc> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v143</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + <UseOfMfc>Static</UseOfMfc> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v143</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + <UseOfMfc>Static</UseOfMfc> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader>Use</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + </Link> + <Midl> + <MkTypLibCompatible>false</MkTypLibCompatible> + <ValidateAllParameters>true</ValidateAllParameters> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </Midl> + <ResourceCompile> + <Culture>0x0804</Culture> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ResourceCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader>Use</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + </Link> + <Midl> + <MkTypLibCompatible>false</MkTypLibCompatible> + <ValidateAllParameters>true</ValidateAllParameters> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </Midl> + <ResourceCompile> + <Culture>0x0804</Culture> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ResourceCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PrecompiledHeader>Use</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <Midl> + <MkTypLibCompatible>false</MkTypLibCompatible> + <ValidateAllParameters>true</ValidateAllParameters> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </Midl> + <ResourceCompile> + <Culture>0x0804</Culture> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ResourceCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PrecompiledHeader>Use</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <Midl> + <MkTypLibCompatible>false</MkTypLibCompatible> + <ValidateAllParameters>true</ValidateAllParameters> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </Midl> + <ResourceCompile> + <Culture>0x0804</Culture> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ResourceCompile> + </ItemDefinitionGroup> + <ItemGroup> + <ClInclude Include="CSMQTT.h" /> + <ClInclude Include="CSMQTTDlg.h" /> + <ClInclude Include="framework.h" /> + <ClInclude Include="pch.h" /> + <ClInclude Include="Resource.h" /> + <ClInclude Include="targetver.h" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="CSMQTT.cpp" /> + <ClCompile Include="CSMQTTDlg.cpp" /> + <ClCompile Include="pch.cpp"> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ResourceCompile Include="CSMQTT.rc" /> + </ItemGroup> + <ItemGroup> + <None Include="res\CSMQTT.rc2" /> + </ItemGroup> + <ItemGroup> + <Image Include="res\CSMQTT.ico" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project> \ No newline at end of file diff --git a/CSMQTT/CSMQTT.vcxproj.filters b/CSMQTT/CSMQTT.vcxproj.filters new file mode 100644 index 0000000..f6a8ece --- /dev/null +++ b/CSMQTT/CSMQTT.vcxproj.filters @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="源文件"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + <Filter Include="头文件"> + <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> + <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> + </Filter> + <Filter Include="资源文件"> + <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> + <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="CSMQTT.h"> + <Filter>头文件</Filter> + </ClInclude> + <ClInclude Include="CSMQTTDlg.h"> + <Filter>头文件</Filter> + </ClInclude> + <ClInclude Include="framework.h"> + <Filter>头文件</Filter> + </ClInclude> + <ClInclude Include="targetver.h"> + <Filter>头文件</Filter> + </ClInclude> + <ClInclude Include="Resource.h"> + <Filter>头文件</Filter> + </ClInclude> + <ClInclude Include="pch.h"> + <Filter>头文件</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <ClCompile Include="CSMQTT.cpp"> + <Filter>源文件</Filter> + </ClCompile> + <ClCompile Include="CSMQTTDlg.cpp"> + <Filter>源文件</Filter> + </ClCompile> + <ClCompile Include="pch.cpp"> + <Filter>源文件</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ResourceCompile Include="CSMQTT.rc"> + <Filter>资源文件</Filter> + </ResourceCompile> + </ItemGroup> + <ItemGroup> + <None Include="res\CSMQTT.rc2"> + <Filter>资源文件</Filter> + </None> + </ItemGroup> + <ItemGroup> + <Image Include="res\CSMQTT.ico"> + <Filter>资源文件</Filter> + </Image> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/CSMQTT/CSMQTTDlg.cpp b/CSMQTT/CSMQTTDlg.cpp new file mode 100644 index 0000000..b0d3250 --- /dev/null +++ b/CSMQTT/CSMQTTDlg.cpp @@ -0,0 +1,144 @@ + +// CSMQTTDlg.cpp: 实现文件 +// + +#include "pch.h" +#include "framework.h" +#include "CSMQTT.h" +#include "CSMQTTDlg.h" +#include "afxdialogex.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// CCSMQTTDlg 对话框 + + + +CCSMQTTDlg::CCSMQTTDlg(CWnd* pParent /*=nullptr*/) + : CDialogEx(IDD_CSMQTT_DIALOG, pParent) +{ + m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); +} + +void CCSMQTTDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialogEx::DoDataExchange(pDX); +} + +BEGIN_MESSAGE_MAP(CCSMQTTDlg, CDialogEx) + ON_WM_PAINT() + ON_WM_QUERYDRAGICON() + ON_BN_CLICKED(IDOK, &CCSMQTTDlg::OnBnClickedOk) +END_MESSAGE_MAP() + + +// CCSMQTTDlg 消息处理程序 + +BOOL CCSMQTTDlg::OnInitDialog() +{ + CDialogEx::OnInitDialog(); + + // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 + // 执行此操作 + SetIcon(m_hIcon, TRUE); // 设置大图标 + SetIcon(m_hIcon, FALSE); // 设置小图标 + + // TODO: 在此添加额外的初始化代码 + + server.SetFunc([this](SOCKET sock, int index, char* buf, short len) {CCSMQTTDlg::Process(sock, index, buf, len); }); + server.CreatServer(1995); + + + //clien[1].Create(); + //clien[1].Connect(_T("127.0.0.1"), 1883); + //clien[1].SetConnectFun([this](int i) {CCSMQTTDlg::Process(i); }); + //clien[1].SetFunc([this](int i) {CCSMQTTDlg::Proc(1); }, 1); + + file.Open(_T("D://1.txt"), CFile::modeCreate | CFile::modeReadWrite); + + file1.Open(_T("D://2.txt"), CFile::modeCreate | CFile::modeReadWrite); + return TRUE; // 除非将焦点设置到控件,否则返回 TRUE +} + +// 如果向对话框添加最小化按钮,则需要下面的代码 +// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, +// 这将由框架自动完成。 + +void CCSMQTTDlg::OnPaint() +{ + if (IsIconic()) + { + CPaintDC dc(this); // 用于绘制的设备上下文 + + SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); + + // 使图标在工作区矩形中居中 + 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; + + // 绘制图标 + dc.DrawIcon(x, y, m_hIcon); + } + else + { + CDialogEx::OnPaint(); + } +} + +//当用户拖动最小化窗口时系统调用此函数取得光标 +//显示。 +HCURSOR CCSMQTTDlg::OnQueryDragIcon() +{ + return static_cast<HCURSOR>(m_hIcon); +} + + + +void CCSMQTTDlg::OnBnClickedOk() +{ + // TODO: 在此添加控件通知处理程序代码 + CDialogEx::OnOK(); +} + +VOID CCSMQTTDlg::Process(SOCKET sock, int index, char* buf, short len) +{ + if(clien.find(index)== clien.end()) + { + clien[index].Create(); + clien[index].Connect(_T("127.0.0.1"), 1883); + clien[index].SetConnectFun([this](int i) {CCSMQTTDlg::Process(i); }); + clien[index].SetFunc([this] (){CCSMQTTDlg::Proc(); }); + } + Sleep(100); + CStringA str; + str.Format("\r\n收到一条消息%d\r\n", index); + int l = clien[index].Send(buf, len, 0); + file.Write(str, str.GetLength()); + file.Write(buf, len); + //CStringA str = buf; +} + +VOID CCSMQTTDlg::Proc(int id) +{ + CStringA str; + str.Format("\r\n收到一条消息%d\r\n", id); + file1.Write(str, str.GetLength()); + char* buf; + int len; + clien[id].GetMsg(&buf,len); + len = server.SendTo(id, buf, len); + file1.Write(buf, len); + delete[]buf; +} + +VOID CCSMQTTDlg::Process(int type) +{ + int i = type; +} diff --git a/CSMQTT/CSMQTTDlg.h b/CSMQTT/CSMQTTDlg.h new file mode 100644 index 0000000..7666cc5 --- /dev/null +++ b/CSMQTT/CSMQTTDlg.h @@ -0,0 +1,42 @@ + +// CSMQTTDlg.h: 头文件 +// + +#pragma once + + +// CCSMQTTDlg 对话框 +class CCSMQTTDlg : public CDialogEx +{ +// 构造 +public: + CCSMQTTDlg(CWnd* pParent = nullptr); // 标准构造函数 + +// 对话框数据 +#ifdef AFX_DESIGN_TIME + enum { IDD = IDD_CSMQTT_DIALOG }; +#endif + + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 + + +// 实现 +protected: + HICON m_hIcon; + + // 生成的消息映射函数 + virtual BOOL OnInitDialog(); + afx_msg void OnPaint(); + afx_msg HCURSOR OnQueryDragIcon(); + DECLARE_MESSAGE_MAP() +public: + afx_msg void OnBnClickedOk(); + SocketServer server; + std::map<int, SocketClien> clien; + CFile file,file1; + + VOID Process(SOCKET sock, int index, char* buf, short len); //处理Socket消息 + VOID Proc(int id); //处理Socket消息 + VOID Process(int type); //处理Socket消息 +}; diff --git a/CSMQTT/framework.h b/CSMQTT/framework.h new file mode 100644 index 0000000..5672fb5 --- /dev/null +++ b/CSMQTT/framework.h @@ -0,0 +1,49 @@ +#pragma once + +#ifndef VC_EXTRALEAN +#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料 +#endif + +#include "targetver.h" + +#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的 + +// 关闭 MFC 的一些常见且经常可放心忽略的隐藏警告消息 +#define _AFX_ALL_WARNINGS + +#include <afxwin.h> // MFC 核心组件和标准组件 +#include <afxext.h> // MFC 扩展 + + +#include <afxdisp.h> // MFC 自动化类 + + + +#ifndef _AFX_NO_OLE_SUPPORT +#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持 +#endif +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include <afxcmn.h> // MFC 对 Windows 公共控件的支持 +#endif // _AFX_NO_AFXCMN_SUPPORT + +#include <afxcontrolbars.h> // MFC 支持功能区和控制条 + + + + + + + + + +#ifdef _UNICODE +#if defined _M_IX86 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") +#elif defined _M_X64 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") +#else +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") +#endif +#endif + + diff --git a/CSMQTT/pch.cpp b/CSMQTT/pch.cpp new file mode 100644 index 0000000..b6fb8f4 --- /dev/null +++ b/CSMQTT/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: 与预编译标头对应的源文件 + +#include "pch.h" + +// 当使用预编译的头时,需要使用此源文件,编译才能成功。 diff --git a/CSMQTT/pch.h b/CSMQTT/pch.h new file mode 100644 index 0000000..e5d0237 --- /dev/null +++ b/CSMQTT/pch.h @@ -0,0 +1,24 @@ +// pch.h: 这是预编译标头文件。 +// 下方列出的文件仅编译一次,提高了将来生成的生成性能。 +// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 +// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 +// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 + +#ifndef PCH_H +#define PCH_H + +// 添加要在此处预编译的标头 +#include "framework.h" + +// 添加要在此处预编译的标头 +#include "framework.h" + +#include "D:/代码/ToolsLib/ToolsLib/ToolsLib.h" + +#ifdef _DEBUG +#pragma comment(lib,"D:/代码/ToolsLib/x64/Debug/ToolsLib.lib") +#else +#pragma comment(lib,"D:/代码/ToolsLib/x64/Release/ToolsLib.lib") +#endif + +#endif //PCH_H diff --git a/CSMQTT/res/CSMQTT.ico b/CSMQTT/res/CSMQTT.ico new file mode 100644 index 0000000..d56fbcd Binary files /dev/null and b/CSMQTT/res/CSMQTT.ico differ diff --git a/CSMQTT/res/CSMQTT.rc2 b/CSMQTT/res/CSMQTT.rc2 new file mode 100644 index 0000000..87c7dff Binary files /dev/null and b/CSMQTT/res/CSMQTT.rc2 differ diff --git a/CSMQTT/resource.h b/CSMQTT/resource.h new file mode 100644 index 0000000..a35f286 --- /dev/null +++ b/CSMQTT/resource.h @@ -0,0 +1,17 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ 生成的包含文件。 +// 供 CSMQTT.rc 使用 +// +#define IDD_CSMQTT_DIALOG 102 +#define IDR_MAINFRAME 128 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 129 +#define _APS_NEXT_COMMAND_VALUE 32771 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/CSMQTT/targetver.h b/CSMQTT/targetver.h new file mode 100644 index 0000000..79934a3 --- /dev/null +++ b/CSMQTT/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。 + +//如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并 +// 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。 + +#include <SDKDDKVer.h> diff --git a/aike.sln b/aike.sln new file mode 100644 index 0000000..1f3d871 --- /dev/null +++ b/aike.sln @@ -0,0 +1,41 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34728.123 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aike", "aike\aike.vcxproj", "{699789E1-D831-4727-88CF-81FB6F000FC8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CSMQTT", "CSMQTT\CSMQTT.vcxproj", "{C76E066B-BE29-415E-8975-0107C4191EEF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {699789E1-D831-4727-88CF-81FB6F000FC8}.Debug|x64.ActiveCfg = Debug|x64 + {699789E1-D831-4727-88CF-81FB6F000FC8}.Debug|x64.Build.0 = Debug|x64 + {699789E1-D831-4727-88CF-81FB6F000FC8}.Debug|x86.ActiveCfg = Debug|Win32 + {699789E1-D831-4727-88CF-81FB6F000FC8}.Debug|x86.Build.0 = Debug|Win32 + {699789E1-D831-4727-88CF-81FB6F000FC8}.Release|x64.ActiveCfg = Release|x64 + {699789E1-D831-4727-88CF-81FB6F000FC8}.Release|x64.Build.0 = Release|x64 + {699789E1-D831-4727-88CF-81FB6F000FC8}.Release|x86.ActiveCfg = Release|Win32 + {699789E1-D831-4727-88CF-81FB6F000FC8}.Release|x86.Build.0 = Release|Win32 + {C76E066B-BE29-415E-8975-0107C4191EEF}.Debug|x64.ActiveCfg = Debug|x64 + {C76E066B-BE29-415E-8975-0107C4191EEF}.Debug|x64.Build.0 = Debug|x64 + {C76E066B-BE29-415E-8975-0107C4191EEF}.Debug|x86.ActiveCfg = Debug|Win32 + {C76E066B-BE29-415E-8975-0107C4191EEF}.Debug|x86.Build.0 = Debug|Win32 + {C76E066B-BE29-415E-8975-0107C4191EEF}.Release|x64.ActiveCfg = Release|x64 + {C76E066B-BE29-415E-8975-0107C4191EEF}.Release|x64.Build.0 = Release|x64 + {C76E066B-BE29-415E-8975-0107C4191EEF}.Release|x86.ActiveCfg = Release|Win32 + {C76E066B-BE29-415E-8975-0107C4191EEF}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4865F74A-1F88-44A6-9C87-A441502B6F0A} + EndGlobalSection +EndGlobal diff --git a/aike/MyDialog.cpp b/aike/MyDialog.cpp new file mode 100644 index 0000000..a867acd --- /dev/null +++ b/aike/MyDialog.cpp @@ -0,0 +1,558 @@ +#include "pch.h" +#include "MyDialog.h" + + +#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) //�ж����״̬ + + +UINT MyDialog::SetWindowsRect(LPVOID pParam) +{ + MyDialog* dlg = (MyDialog*)pParam; + CPoint point; + CRect rt; + while (KEY_DOWN(VK_LBUTTON)) + { + GetCursorPos(&point); + dlg->m_wnd->GetWindowRect(rt); + switch (dlg->MouseState) + { + case 2: + rt.OffsetRect(point - dlg->pt); + dlg->m_wnd->MoveWindow(rt); + break; + case 3: + rt.top = rt.top + point.y - dlg->pt.y; + dlg->m_wnd->MoveWindow(rt); + break; + case 4: + rt.right = rt.right + point.x - dlg->pt.x; + dlg->m_wnd->MoveWindow(rt); + break; + case 5: + rt.bottom = rt.bottom + point.y - dlg->pt.y; + dlg->m_wnd->MoveWindow(rt); + break; + case 6: + rt.left = rt.left + point.x - dlg->pt.x; + dlg->m_wnd->MoveWindow(rt); + break; + default: + break; + } + dlg->pt = point; + Sleep(50); + } + dlg->MouseState = 0; + return 0; +} + + + +VOID MyDialog::LBDown(MSG* pMsg) +{ + CArray <int> buttArr; + GetPtButton(pMsg->pt, buttArr); + clock_t tt = clock(); + for (int i = 0; i < buttArr.GetCount(); i++) + { + infoMap[buttArr[i]].State = 2; + infoMap[buttArr[i]].lastLD = tt; + } + PaintDlg(); + if (buttArr.GetCount() == 0) + { + + if (MouseState == 0) + { + /*2�ƶ����ڣ�3��4��5��6�������ϡ��ҡ��¡�������*/ + GetCursorPos(&pt); + CPoint point = pMsg->pt; + m_wnd->ScreenToClient(&point); //ת������Ļ���� + CRect rt; + m_wnd->GetWindowRect(rt); + if (point.y >= 3 && point.y < 30) + { + MouseState = 2; + } + else if (point.y < 3) + { + MouseState = 3; + } + else if (point.x > rt.Width() - 3) + { + MouseState = 4; + } + else if (point.y > rt.Height() - 3) + { + MouseState = 5; + } + else if (point.x < 3) + { + MouseState = 6; + } + else + { + return; + } + AfxBeginThread(SetWindowsRect, this); + } + } +} + +VOID MyDialog::LBUP(MSG* pMsg) +{ + CArray <int> buttArr; + GetPtButton(pMsg->pt, buttArr); + clock_t tt = clock(); + for (int i = 0; i < buttArr.GetCount(); i++) + { + infoMap[buttArr[i]].State = 1; + if (tt - infoMap[buttArr[i]].lastLD < 400 && tt - infoMap[buttArr[i]].lastLU > 300) + { + if (infoMap[buttArr[i]].LClick != NULL) + infoMap[buttArr[i]].LClick(buttArr[i]); + } + infoMap[buttArr[i]].lastLU = tt; + } + PaintDlg(); +} + +VOID MyDialog::RBDown(MSG* pMsg) +{ + CArray <int> buttArr; + GetPtButton(pMsg->pt, buttArr); + clock_t tt = clock(); + for (int i = 0; i < buttArr.GetCount(); i++) + { + infoMap[buttArr[i]].State = 2; + infoMap[buttArr[i]].lastRD = tt; + } + PaintDlg(); +} + +VOID MyDialog::RBUP(MSG* pMsg) +{ + CArray <int> buttArr; + GetPtButton(pMsg->pt, buttArr); + clock_t tt = clock(); + for (int i = 0; i < buttArr.GetCount(); i++) + { + infoMap[buttArr[i]].State = 1; + if (tt - infoMap[buttArr[i]].lastRD < 400 && tt - infoMap[buttArr[i]].lastRU > 300) + { + if (infoMap[buttArr[i]].RClick != NULL) + infoMap[buttArr[i]].RClick(buttArr[i]); + } + infoMap[buttArr[i]].lastRU = tt; + } + PaintDlg(); +} + +VOID MyDialog::MMove(MSG* pMsg) +{ + if (!m_bTracked) //����Ƿ���봰�� + { + TRACKMOUSEEVENT tme; + tme.cbSize = sizeof(tme); + tme.dwFlags = TME_LEAVE; + tme.dwHoverTime = 0; + tme.hwndTrack = m_wnd->m_hWnd; + TrackMouseEvent(&tme); // ���ú��� + m_bTracked = TRUE; // ��������봰�� + m_wnd->Invalidate(FALSE); + } + CArray <int> buttArr; + GetPtButton(pMsg->pt, buttArr); + PaintDlg(); +} + +VOID MyDialog::MLeave(MSG* pMsg) +{ + m_bTracked = FALSE; // �������뿪���� + CArray <int> buttArr; + GetPtButton(CPoint(-1000, -1000), buttArr); + PaintDlg(); +} + +VOID MyDialog::LDClick(MSG* pMsg) +{ + CArray <int> buttArr; + GetPtButton(pMsg->pt, buttArr); + for (int i = 0; i < buttArr.GetCount(); i++) + { + if (infoMap[buttArr[i]].LDClick != NULL) + infoMap[buttArr[i]].LDClick(buttArr[i]); + } + PaintDlg(); +} + +VOID MyDialog::RDClick(MSG* pMsg) +{ + CArray <int> buttArr; + GetPtButton(pMsg->pt, buttArr); + for (int i = 0; i < buttArr.GetCount(); i++) + { + if (infoMap[buttArr[i]].RDClick != NULL) + infoMap[buttArr[i]].RDClick(buttArr[i]); + } + PaintDlg(); +} + +VOID MyDialog::GetPtButton(CPoint pt, CArray<int>& ButtArr) +{ + m_wnd->ScreenToClient(&pt); //ת������Ļ���� + for (auto i = infoMap.begin(); i != infoMap.end(); i++) //�������а�ť + { + if (i->second.rt.PtInRect(pt)) + { + ButtArr.Add(i->first); + if (i->second.State == 0) + i->second.State = 1; + } + else + { + i->second.State = 0; + } + } +} + +BOOL MyDialog::CImageCopy(CImage& SrcImg, CImage& DesImg) +{ + if (SrcImg.IsNull()) + return FALSE; + //Դͼ����� + BYTE* srcPtr = (BYTE*)SrcImg.GetBits(); + int srcBitsCount = SrcImg.GetBPP(); + int srcWidth = SrcImg.GetWidth(); + int srcHeight = SrcImg.GetHeight(); + int srcPitch = SrcImg.GetPitch(); + //����ԭ��ͼ�� + if (!DesImg.IsNull()) + { + DesImg.Destroy(); + } + //������ͼ�� + if (srcBitsCount == 32) //֧��alphaͨ�� + { + DesImg.Create(srcWidth, srcHeight, srcBitsCount, 1); + } + else + { + DesImg.Create(srcWidth, srcHeight, srcBitsCount, 0); + } + //���ص�ɫ�� + if (srcBitsCount <= 8 && DesImg.IsIndexed())//��Ҫ��ɫ�� + { + RGBQUAD pal[256]; + int nColors = SrcImg.GetMaxColorTableEntries(); + if (nColors > 0) + { + SrcImg.GetColorTable(0, nColors, pal); + DesImg.SetColorTable(0, nColors, pal);//���Ƶ�ɫ����� + } + } + //Ŀ��ͼ����� + BYTE* destPtr = (BYTE*)DesImg.GetBits(); + int destPitch = DesImg.GetPitch(); + //����ͼ������ + for (INT i = 0; i < srcHeight; i++) + { + memcpy(destPtr + i * destPitch, srcPtr + i * srcPitch, abs(srcPitch)); + } + + return TRUE; +} + +BOOL MyDialog::CreateStretchImage(const CImage& src, CImage& dest, int stretchWidth, int stretchHeight) +{ + if (src.IsDIBSection()) + { + if (!dest.IsNull()) + { + dest.Destroy(); + } + if (stretchWidth == 0 || stretchHeight == 0) + { + stretchWidth = src.GetWidth(); + stretchHeight = src.GetHeight(); + } + if (dest.Create(stretchWidth, stretchHeight, 16)) + { + HDC destDC = dest.GetDC(); + ::SetStretchBltMode(destDC, HALFTONE); + src.StretchBlt(destDC, 0, 0, stretchWidth, stretchHeight); + dest.ReleaseDC(); + return TRUE; + } + } + return FALSE; +} + +MyDialog::MyDialog(CWnd* wnd) +{ + m_wnd = wnd; + ButtonU.Create(16, 16, 16); //����ͼƬ + FillRect(ButtonU.GetDC(), CRect(0, 0, 16, 16), CreateSolidBrush(RGB(125, 125, 125))); + ButtonU.ReleaseDC(); + ButtonF.Create(16, 16, 16); //����ͼƬ + FillRect(ButtonF.GetDC(), CRect(0, 0, 16, 16), CreateSolidBrush(RGB(180, 180, 180))); + ButtonF.ReleaseDC(); + ButtonD.Create(16, 16, 16); //����ͼƬ + FillRect(ButtonD.GetDC(), CRect(0, 0, 16, 16), CreateSolidBrush(RGB(90, 90, 90))); + ButtonD.ReleaseDC(); + ButtonS.Create(16, 16, 16); //����ͼƬ + FillRect(ButtonS.GetDC(), CRect(0, 0, 16, 16), CreateSolidBrush(RGB(50, 50, 50))); + ButtonS.ReleaseDC(); +} + +BOOL MyDialog::AddButton(int ID, CRect rt, CImage& ButtonU, CImage& ButtonF, CImage& ButtonD, CImage& ButtonS) +{ + rt.NormalizeRect(); + if (rt.Width() > 0 && rt.Height() > 0) + { + if (infoMap.find(ID) == infoMap.end()) //�жϰ�ť�Ƿ���� + { + ButtonInfo info; + info.rt = rt; + infoMap[ID] = info; + if (!ButtonU.IsNull()) + { + if (!CImageCopy(ButtonU, infoMap[ID].ButtonU)) + { + infoMap.erase(ID); + return FALSE; + } + } + if (!ButtonF.IsNull()) + { + if (!CImageCopy(ButtonF, infoMap[ID].ButtonF)) + { + infoMap.erase(ID); + return FALSE; + } + } + if (!ButtonD.IsNull()) + { + if (!CImageCopy(ButtonD, infoMap[ID].ButtonD)) + { + infoMap.erase(ID); + return FALSE; + } + } + if (!ButtonS.IsNull()) + { + if (!CImageCopy(ButtonS, infoMap[ID].ButtonS)) + { + infoMap.erase(ID); + return FALSE; + } + } + return TRUE; + } + else + { + return FALSE; + } + } + else + { + return FALSE; + } +} + +VOID MyDialog::PTMessage(MSG* pMsg) +{ + switch (pMsg->message) + { + case WM_RBUTTONDBLCLK: //˫�� ����Ҽ�˫�������WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCK WM_LBUTTONUP �ĸ���Ϣ + RDClick(pMsg); + break; + case WM_RBUTTONDOWN: //����Ҽ����� + RBDown(pMsg); + break; + case WM_RBUTTONUP: //����Ҽ�̧�� + RBUP(pMsg); + break; + case WM_LBUTTONDBLCLK: //˫�� ������˫�������WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCK WM_LBUTTONUP �ĸ���Ϣ + LDClick(pMsg); + break; + case WM_LBUTTONDOWN: //���������� + LBDown(pMsg); + break; + case WM_LBUTTONUP: //������̧�� + LBUP(pMsg); + break; + case WM_MOUSEMOVE: //����ƶ� + MMove(pMsg); + break; + case WM_MOUSELEAVE: //����뿪���� + MLeave(pMsg); + break; + case WM_MOUSEWHEEL: //��껬������ + break; + default: + break; + } +} + +VOID MyDialog::PaintDlg() +{ + if (Background.IsNull()) + { + m_wnd->ModifyStyle(GWL_EXSTYLE, WS_CLIPCHILDREN, SWP_FRAMECHANGED); //ȥ���˵��������û������Ͱ�ť��ʱ���ڵ�MFC�ؼ� + Background.Create(16, 16, 16); //����ͼƬ + FillRect(Background.GetDC(), CRect(0, 0, 16, 16), CreateSolidBrush(RGB(255, 255, 255))); + Background.ReleaseDC(); + return; + } + CDC* m_dc = m_wnd->GetDC(); //��ȡ����HDC + CRect rt; + m_wnd->GetWindowRect(rt); + rt.MoveToXY(0, 0); + CImage img; + if (!CreateStretchImage(Background, img, rt.Width(), rt.Height())) + return; + HDC hdc = img.GetDC(); + for (auto i = infoMap.begin(); i != infoMap.end(); i++) //�������а�ť + { + switch (i->second.State) + { + case 1: + if (i->second.ButtonF.IsNull()) + { + ButtonF.Draw(hdc, i->second.rt); + } + else + { + i->second.ButtonF.Draw(hdc, i->second.rt); + } + break; + case 2: + if (i->second.ButtonD.IsNull()) + { + ButtonD.Draw(hdc, i->second.rt); + } + else + { + i->second.ButtonD.Draw(hdc, i->second.rt); + } + break; + case 3: + if (i->second.ButtonS.IsNull()) + { + ButtonS.Draw(hdc, i->second.rt); + } + else + { + i->second.ButtonS.Draw(hdc, i->second.rt); + } + break; + default: + if (i->second.ButtonU.IsNull()) + { + ButtonU.Draw(hdc, i->second.rt); + } + else + { + i->second.ButtonU.Draw(hdc, i->second.rt); + } + break; + } + } + img.ReleaseDC(); + ::SetStretchBltMode(m_dc->m_hDC, HALFTONE); + img.Draw(m_dc->m_hDC, rt); + m_wnd->ReleaseDC(m_dc); + return; +} + +VOID MyDialog::EnableButton(int ID, BOOL Flag) +{ + if (infoMap.find(ID) != infoMap.end()) //�жϰ�ť�Ƿ���� + { + infoMap[ID].State = 3; + } + PaintDlg(); +} + +BOOL MyDialog::SetBackground(CImage& img) +{ + if (CreateStretchImage(img, Background)) + { + return TRUE; + } + return FALSE; +} + +BOOL MyDialog::SetLClick(int ID, Fun func) +{ + if (infoMap.find(ID) != infoMap.end()) //�жϰ�ť�Ƿ���� + { + infoMap[ID].LClick = func; + return TRUE; + } + return FALSE; +} + +BOOL MyDialog::SetLDClick(int ID, Fun func) +{ + if (infoMap.find(ID) != infoMap.end()) //�жϰ�ť�Ƿ���� + { + infoMap[ID].LDClick = func; + return TRUE; + } + return FALSE; +} + +BOOL MyDialog::SetRClick(int ID, Fun func) +{ + if (infoMap.find(ID) != infoMap.end()) //�жϰ�ť�Ƿ���� + { + infoMap[ID].RClick = func; + return TRUE; + } + return FALSE; +} + +BOOL MyDialog::SetRDClick(int ID, Fun func) +{ + if (infoMap.find(ID) != infoMap.end()) //�жϰ�ť�Ƿ���� + { + infoMap[ID].RDClick = func; + return TRUE; + } + return FALSE; +} + +BOOL MyDialog::MoveButton(int ID, CRect rt) +{ + rt.NormalizeRect(); + if (rt.Width() > 0 && rt.Height() > 0) + { + if (infoMap.find(ID) != infoMap.end()) //�жϰ�ť�Ƿ���� + { + infoMap[ID].rt = rt; + return TRUE; + } + } + return FALSE; +} + +VOID MyDialog::DeleteButton(int ID) +{ + infoMap.erase(ID); +} + +VOID MyDialog::DeleteAllButton() +{ + infoMap.clear(); +} + +CRect MyDialog::GetButtonRect(int ID) +{ + if (infoMap.find(ID) != infoMap.end()) //�жϰ�ť�Ƿ���� + { + return infoMap[ID].rt; + } + return CRect(0, 0, 0, 0); +} diff --git a/aike/MyDialog.h b/aike/MyDialog.h new file mode 100644 index 0000000..fa75a68 --- /dev/null +++ b/aike/MyDialog.h @@ -0,0 +1,96 @@ +#pragma once +#include <map> +#include <functional> + + +class MyDialog +{ +private: + + CImage ButtonU; //����״̬ʱ�İ�ťͼƬ + CImage ButtonF; //�����ͣ�İ�ťͼƬ + CImage ButtonD; //��갴��ʱ�İ�ťͼƬ + CImage ButtonS; //��ťʧЧ���ͼƬ + static UINT SetWindowsRect(LPVOID pParam); + typedef std::function<void(int)> Fun; + struct ButtonInfo //������ť��Ϣ + { + CImage ButtonU; //����״̬ʱ�İ�ťͼƬ + CImage ButtonF; //�����ͣ�İ�ťͼƬ + CImage ButtonD; //��갴��ʱ�İ�ťͼƬ + CImage ButtonS; //��ťʧЧ���ͼƬ + CRect rt; //��ťλ�� + Fun LClick = NULL; //�����������ص����� + Fun LDClick = NULL; //������˫���ص����� + Fun RClick = NULL; //����Ҽ������ص����� + Fun RDClick = NULL; //����Ҽ�˫���ص����� + short State = 0; //��ǰ״̬ȷ����ʾ����ͼƬ + clock_t lastLD = 0; //�ϴ�������µ�ʱ�� + clock_t lastRD = 0; //�ϴ��Ҽ����µ�ʱ�� + clock_t lastLU = 0; //�ϴ����̧���ʱ�� + clock_t lastRU = 0; //�ϴ��Ҽ�̧���ʱ�� + void operator = (ButtonInfo& info) + { + rt = info.rt; + LClick = info.LClick; + LDClick = info.LDClick; + RClick = info.RClick; + RDClick = info.RDClick; + State = info.State; + CreateStretchImage(info.ButtonU, ButtonU); + CreateStretchImage(info.ButtonF, ButtonF); + CreateStretchImage(info.ButtonD, ButtonD); + CreateStretchImage(info.ButtonS, ButtonS); + } + ~ButtonInfo() + { + ButtonU.Destroy(); + ButtonF.Destroy(); + ButtonD.Destroy(); + ButtonS.Destroy(); + + LClick = NULL; //�����������ص����� + LDClick = NULL; //������˫���ص����� + RClick = NULL; //����Ҽ������ص����� + RDClick = NULL; //����Ҽ�˫���ص����� + } + }; + std::map<int, ButtonInfo> infoMap; //������а�ť + CImage Background; //����ͼƬ + BOOL m_bTracked = FALSE; //����Ƿ��ڴ����� + CWnd* m_wnd; //���õĴ��� + BOOL imgRect = FALSE; //�����Ƿ���ͼƬ��С��ʾ + int MouseState = 0; //���״̬ȷ���������ƶ����Ǹı��С 2�ƶ����ڣ�3��4��5��6�������ϡ��ҡ��¡������� + CPoint pt; //����ϴε�λ�� + VOID LBDown(MSG* pMsg); //���������� + VOID LBUP(MSG* pMsg); //������̧�� + VOID RBDown(MSG* pMsg); //���������� + VOID RBUP(MSG* pMsg); //���������� + VOID MMove(MSG* pMsg); //����ƶ� + VOID MLeave(MSG* pMsg); //����뿪���� + VOID LDClick(MSG* pMsg); //������˫�� + VOID RDClick(MSG* pMsg); //����Ҽ�˫�� + VOID GetPtButton(CPoint pt, CArray<int>& ButtArr); //��ȡ��λ���ж��ٰ�ť������������ť���ó�Ĭ��״̬ +public: + static BOOL CreateStretchImage(const CImage& src, CImage& dest, int stretchWidth = 0, int stretchHeight = 0); //����������ͼƬ + BOOL CImageCopy(CImage& SrcImg, CImage& DesImg); + MyDialog(CWnd* wnd); + BOOL AddButton(int ID, CRect rt, CImage& ButtonU = CImage(), CImage& ButtonF = CImage(), CImage& ButtonD = CImage(), CImage& ButtonS = CImage()); //���Ӱ�ť + VOID PTMessage(MSG* pMsg); //����������Ϣ + VOID PaintDlg(); //�ػ���Ϣ + VOID EnableButton(int ID, BOOL Flag); //���û���ð�ť + BOOL SetBackground(CImage& img); //���ñ���ͼƬ + BOOL SetLClick(int ID, Fun func); //������������������ + BOOL SetLDClick(int ID, Fun func); //����������˫������ + BOOL SetRClick(int ID, Fun func); //��������Ҽ��������� + BOOL SetRDClick(int ID, Fun func); //��������Ҽ�˫������ + BOOL MoveButton(int ID, CRect rt); //�ƶ���ť + VOID DeleteButton(int ID); //ɾ����ť + VOID DeleteAllButton(); //ɾ����ť + + CRect GetButtonRect(int ID); //��ȡ��ťλ�� + + + + +}; \ No newline at end of file diff --git a/aike/aike.cpp b/aike/aike.cpp new file mode 100644 index 0000000..5e208bf --- /dev/null +++ b/aike/aike.cpp @@ -0,0 +1,123 @@ + +// aike.cpp: 定义应用程序的类行为。 +// + +#include "pch.h" +#include "framework.h" +#include "aike.h" +#include "aikeDlg.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// CaikeApp + +BEGIN_MESSAGE_MAP(CaikeApp, CWinApp) + ON_COMMAND(ID_HELP, &CWinApp::OnHelp) +END_MESSAGE_MAP() + + +// CaikeApp 构造 + +CaikeApp::CaikeApp() +{ + // 支持重新启动管理器 + m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; + + // TODO: 在此处添加构造代码, + // 将所有重要的初始化放置在 InitInstance 中 + + +} + + +// 唯一的 CaikeApp 对象 + +CaikeApp theApp; + + +// CaikeApp 初始化 + +BOOL CaikeApp::InitInstance() +{ + // 如果一个运行在 Windows XP 上的应用程序清单指定要 + // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, + //则需要 InitCommonControlsEx()。 否则,将无法创建窗口。 + INITCOMMONCONTROLSEX InitCtrls; + InitCtrls.dwSize = sizeof(InitCtrls); + // 将它设置为包括所有要在应用程序中使用的 + // 公共控件类。 + InitCtrls.dwICC = ICC_WIN95_CLASSES; + InitCommonControlsEx(&InitCtrls); + + CWinApp::InitInstance(); + + + CreateMutex(NULL, TRUE, TEXT("aike宾馆软件客户端")); //避免程序的多开 xxxx为信号量的名字 可随意 + if (GetLastError() == ERROR_ALREADY_EXISTS) + { + CWnd* cwnd = CWnd::FindWindow(NULL, TEXT("爱客宾馆软件"));//windowname为你的主窗体的标题,当然你也可以通过进程来找到主窗体。 + if (cwnd)//显示原先的主界面 + { + cwnd->ShowWindow(SW_SHOWNORMAL); + cwnd->SetForegroundWindow(); + } + return FALSE; + } + + + + AfxEnableControlContainer(); + + // 创建 shell 管理器,以防对话框包含 + // 任何 shell 树视图控件或 shell 列表视图控件。 + CShellManager *pShellManager = new CShellManager; + + // 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题 + CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); + + // 标准初始化 + // 如果未使用这些功能并希望减小 + // 最终可执行文件的大小,则应移除下列 + // 不需要的特定初始化例程 + // 更改用于存储设置的注册表项 + // TODO: 应适当修改该字符串, + // 例如修改为公司或组织名 + SetRegistryKey(_T("应用程序向导生成的本地应用程序")); + + CaikeDlg dlg; + m_pMainWnd = &dlg; + INT_PTR nResponse = dlg.DoModal(); + if (nResponse == IDOK) + { + // TODO: 在此放置处理何时用 + // “确定”来关闭对话框的代码 + } + else if (nResponse == IDCANCEL) + { + // TODO: 在此放置处理何时用 + // “取消”来关闭对话框的代码 + } + else if (nResponse == -1) + { + TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n"); + TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n"); + } + + // 删除上面创建的 shell 管理器。 + if (pShellManager != nullptr) + { + delete pShellManager; + } + +#if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS) + ControlBarCleanUp(); +#endif + + // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, + // 而不是启动应用程序的消息泵。 + return FALSE; +} + diff --git a/aike/aike.h b/aike/aike.h new file mode 100644 index 0000000..dc3d077 --- /dev/null +++ b/aike/aike.h @@ -0,0 +1,32 @@ + +// aike.h: PROJECT_NAME 应用程序的主头文件 +// + +#pragma once + +#ifndef __AFXWIN_H__ + #error "在包含此文件之前包含 'pch.h' 以生成 PCH" +#endif + +#include "resource.h" // 主符号 + + +// CaikeApp: +// 有关此类的实现,请参阅 aike.cpp +// + +class CaikeApp : public CWinApp +{ +public: + CaikeApp(); + +// 重写 +public: + virtual BOOL InitInstance(); + +// 实现 + + DECLARE_MESSAGE_MAP() +}; + +extern CaikeApp theApp; diff --git a/aike/aike.rc b/aike/aike.rc new file mode 100644 index 0000000..b07f87c Binary files /dev/null and b/aike/aike.rc differ diff --git a/aike/aike.vcxproj b/aike/aike.vcxproj new file mode 100644 index 0000000..b37fe0e --- /dev/null +++ b/aike/aike.vcxproj @@ -0,0 +1,217 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <VCProjectVersion>17.0</VCProjectVersion> + <ProjectGuid>{699789E1-D831-4727-88CF-81FB6F000FC8}</ProjectGuid> + <Keyword>MFCProj</Keyword> + <RootNamespace>aike</RootNamespace> + <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v143</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + <UseOfMfc>Static</UseOfMfc> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v143</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + <UseOfMfc>Static</UseOfMfc> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v143</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + <UseOfMfc>Static</UseOfMfc> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v143</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + <UseOfMfc>Static</UseOfMfc> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader>Use</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <Midl> + <MkTypLibCompatible>false</MkTypLibCompatible> + <ValidateAllParameters>true</ValidateAllParameters> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </Midl> + <ResourceCompile> + <Culture>0x0804</Culture> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ResourceCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader>Use</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + </Link> + <Midl> + <MkTypLibCompatible>false</MkTypLibCompatible> + <ValidateAllParameters>true</ValidateAllParameters> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </Midl> + <ResourceCompile> + <Culture>0x0804</Culture> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ResourceCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PrecompiledHeader>Use</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <Midl> + <MkTypLibCompatible>false</MkTypLibCompatible> + <ValidateAllParameters>true</ValidateAllParameters> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </Midl> + <ResourceCompile> + <Culture>0x0804</Culture> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ResourceCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PrecompiledHeader>Use</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <PreprocessorDefinitions>_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + <Midl> + <MkTypLibCompatible>false</MkTypLibCompatible> + <ValidateAllParameters>true</ValidateAllParameters> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </Midl> + <ResourceCompile> + <Culture>0x0804</Culture> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ResourceCompile> + </ItemDefinitionGroup> + <ItemGroup> + <ClInclude Include="aike.h" /> + <ClInclude Include="aikeDlg.h" /> + <ClInclude Include="framework.h" /> + <ClInclude Include="pch.h" /> + <ClInclude Include="Resource.h" /> + <ClInclude Include="targetver.h" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="aike.cpp" /> + <ClCompile Include="aikeDlg.cpp" /> + <ClCompile Include="pch.cpp"> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader> + <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ResourceCompile Include="aike.rc" /> + </ItemGroup> + <ItemGroup> + <None Include="res\aike.rc2" /> + </ItemGroup> + <ItemGroup> + <Image Include="res\aike.ico" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project> \ No newline at end of file diff --git a/aike/aike.vcxproj.filters b/aike/aike.vcxproj.filters new file mode 100644 index 0000000..da39dc1 --- /dev/null +++ b/aike/aike.vcxproj.filters @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="源文件"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + <Filter Include="头文件"> + <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> + <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> + </Filter> + <Filter Include="资源文件"> + <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> + <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="aike.h"> + <Filter>头文件</Filter> + </ClInclude> + <ClInclude Include="aikeDlg.h"> + <Filter>头文件</Filter> + </ClInclude> + <ClInclude Include="framework.h"> + <Filter>头文件</Filter> + </ClInclude> + <ClInclude Include="targetver.h"> + <Filter>头文件</Filter> + </ClInclude> + <ClInclude Include="Resource.h"> + <Filter>头文件</Filter> + </ClInclude> + <ClInclude Include="pch.h"> + <Filter>头文件</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <ClCompile Include="aike.cpp"> + <Filter>源文件</Filter> + </ClCompile> + <ClCompile Include="aikeDlg.cpp"> + <Filter>源文件</Filter> + </ClCompile> + <ClCompile Include="pch.cpp"> + <Filter>源文件</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ResourceCompile Include="aike.rc"> + <Filter>资源文件</Filter> + </ResourceCompile> + </ItemGroup> + <ItemGroup> + <None Include="res\aike.rc2"> + <Filter>资源文件</Filter> + </None> + </ItemGroup> + <ItemGroup> + <Image Include="res\aike.ico"> + <Filter>资源文件</Filter> + </Image> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/aike/aikeDlg.cpp b/aike/aikeDlg.cpp new file mode 100644 index 0000000..178dbd1 --- /dev/null +++ b/aike/aikeDlg.cpp @@ -0,0 +1,372 @@ + +// aikeDlg.cpp: 实现文件 +// + +#include "pch.h" +#include "framework.h" +#include "aike.h" +#include "aikeDlg.h" +#include "afxdialogex.h" + + + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + +#define WM_TRAYICON_MSG (WM_USER + 100) //创建托盘图标消息 + +// CaikeDlg 对话框 + + + +CaikeDlg::CaikeDlg(CWnd* pParent /*=nullptr*/) + : CDialogEx(IDD_AIKE_DIALOG, pParent) + ,MyDialog(this) +{ + m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); +} + +void CaikeDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialogEx::DoDataExchange(pDX); +} + +BEGIN_MESSAGE_MAP(CaikeDlg, CDialogEx) + ON_WM_PAINT() + ON_WM_QUERYDRAGICON() + ON_WM_SIZE() + ON_WM_GETMINMAXINFO() + ON_MESSAGE(WM_TRAYICON_MSG, OnTrayCallBackMsg) //点击了托盘图标 + ON_WM_DESTROY() + ON_COMMAND(ID_SHOW_MENU, &CaikeDlg::OnShowMenu) + ON_COMMAND(ID_CLONE_MENU, &CaikeDlg::OnCloneMenu) +END_MESSAGE_MAP() + + +// CaikeDlg 消息处理程序 + +BOOL CaikeDlg::OnInitDialog() +{ + CDialogEx::OnInitDialog(); + Initialize(); + + return TRUE; // 除非将焦点设置到控件,否则返回 TRUE +} + +// 如果向对话框添加最小化按钮,则需要下面的代码 +// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, +// 这将由框架自动完成。 + +void CaikeDlg::OnPaint() +{ + if (!IsIconic()) + { + PaintDlg(); + CDialogEx::OnPaint(); + } +} + +//当用户拖动最小化窗口时系统调用此函数取得光标 +//显示。 +HCURSOR CaikeDlg::OnQueryDragIcon() +{ + return static_cast<HCURSOR>(m_hIcon); +} + + +//截获窗口消息 +BOOL CaikeDlg::PreTranslateMessage(MSG* pMsg) +{ + // TODO: 在此添加专用代码和/或调用基类 + PTMessage(pMsg); + return __super::PreTranslateMessage(pMsg); +} + +//窗口大小发生改变 +void CaikeDlg::OnSize(UINT nType, int cx, int cy) +{ + __super::OnSize(nType, cx, cy); + CRect rt, tt; + GetWindowRect(rt); + tt = { 0,0,25,25 }; + tt.MoveToX(rt.Width() - 75); + MoveButton(1, tt); + tt.MoveToX(rt.Width() - 50); + MoveButton(2, tt); + MoveButton(3, tt); + tt.MoveToX(rt.Width() - 25); + MoveButton(4, tt); + // TODO: 在此处添加消息处理程序代码 +} + +//设置窗口最大和最小范围 +void CaikeDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI) +{ + // TODO: 在此添加消息处理程序代码和/或调用默认值 + lpMMI->ptMaxSize.y = GetSystemMetrics(SM_CYFULLSCREEN) + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYDLGFRAME); + __super::OnGetMinMaxInfo(lpMMI); +} + +//按下回车 +void CaikeDlg::OnOK() +{ + // TODO: 在此添加专用代码和/或调用基类 + + //__super::OnOK(); +} + +//窗口即将销毁 +void CaikeDlg::OnDestroy() +{ + __super::OnDestroy(); + + // TODO: 在此处添加消息处理程序代码 + TrayMylcon(FALSE); +} + +//显示窗口(托盘消息) +void CaikeDlg::OnShowMenu() +{ + // TODO: 在此添加命令处理程序代码 + ShowWindow(SW_SHOWNORMAL); + SetForegroundWindow(); +} + +//关闭窗口(托盘消息) +void CaikeDlg::OnCloneMenu() +{ + // TODO: 在此添加命令处理程序代码 + CDialogEx::OnCancel(); +} + +//初始化 +VOID CaikeDlg::Initialize() +{ + //获取程序路径 + HMODULE module = GetModuleHandle(0); + TCHAR path[MAX_PATH] = { 0 }; + GetModuleFileName(module, path, MAX_PATH); //获取本程序绝对路径 + m_Path = path; + m_Path = m_Path.Left(m_Path.ReverseFind('\\') + 1); + + //添加按钮 + CImage img, img1; + img.Load(_T("../aike/res/background.jpg")); + SetBackground(img); + AddButton(1, CRect(0, 0, 25, 25)); + SetLClick(1, [this](int i) {MinClick(i); }); + AddButton(2, CRect(0, 0, 25, 25)); + SetLClick(2, [this](int i) {MaxClick(i); }); + AddButton(3, GetButtonRect(2)); + SetLClick(3, [this](int i) {ReductionClick(i); }); + AddButton(4, CRect(0, 0, 25, 25)); + SetLClick(4, [this](int i) {CloseClick(i); }); + + CRect rt = { 0, 0, 180, 180 }; + rt.MoveToXY(100, 100); + img.Destroy(); + img.Load(_T("../aike/res/business.jpg")); + img1.Load(_T("../aike/res/business1.jpg")); + AddButton(10, rt, img, img1, img1, img1); + SetLClick(10, [this](int i) {text(i); }); + + + rt.MoveToXY(300, 100); + img.Destroy(); + img1.Destroy(); + img.Load(_T("../aike/res/member.jpg")); + img1.Load(_T("../aike/res/member1.jpg")); + AddButton(11, rt, img, img1, img1, img1); + + rt.MoveToXY(500, 100); + img.Destroy(); + img1.Destroy(); + img.Load(_T("../aike/res/report.jpg")); + img1.Load(_T("../aike/res/report1.jpg")); + AddButton(12, rt, img, img1, img1, img1); + + rt.MoveToXY(100, 300); + img.Destroy(); + img1.Destroy(); + img.Load(_T("../aike/res/Booking.jpg")); + img1.Load(_T("../aike/res/Booking1.jpg")); + AddButton(13, rt, img, img1, img1, img1); + EnableButton(3, FALSE); + + rt.MoveToXY(300, 300); + img.Destroy(); + img1.Destroy(); + img.Load(_T("../aike/res/inventory.jpg")); + img1.Load(_T("../aike/res/inventory1.jpg")); + AddButton(14, rt, img, img1, img1, img1); + EnableButton(3, FALSE); + + rt.MoveToXY(500, 300); + img.Destroy(); + img1.Destroy(); + img.Load(_T("../aike/res/basis.jpg")); + img1.Load(_T("../aike/res/basis1.jpg")); + AddButton(15, rt, img, img1, img1, img1); + EnableButton(3, FALSE); + MaxClick(0); + + //连接服务器 + //SClien.Create(); + //SClien.SetConnectFun([this](int i) {TCPState(i); }); + //SClien.SetFunc([this]() {Process(); }); + //SClien.Connect(ServerIP, ServerProt); + + //连接数据库 + if (!AdoSql.ConnectSQL(ServerIP, DataBase, UserName, AdoPass)) + { + MessageBox(_T("数据库连接失败"), _T("温馨提示")); + exit(0); + } + TrayMylcon(TRUE); +} + +//添加系统托盘 +BOOL CaikeDlg::TrayMylcon(BOOL bAdd) +{ + BOOL bRet = FALSE; + NOTIFYICONDATA tnd; + tnd.cbSize = sizeof(NOTIFYICONDATA); + tnd.hWnd = m_hWnd; + tnd.uID = IDR_MAINFRAME; //设置要加载的图标 + if (bAdd == TRUE) + { + tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; + tnd.uCallbackMessage = WM_TRAYICON_MSG; //给主对话框发送自定义消息 + tnd.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)); + _tcscpy_s(tnd.szTip, sizeof(tnd.szTip), _T("爱客宾馆软件客户端")); + bRet = Shell_NotifyIcon(NIM_ADD, &tnd); + } + else + { + SetForegroundWindow(); + bRet = Shell_NotifyIcon(NIM_DELETE, &tnd); + } + return bRet; +} + +//点击系统托盘响应事件 +LRESULT CaikeDlg::OnTrayCallBackMsg(WPARAM wparam, LPARAM lparam) +{ + switch (lparam) + { + case WM_RBUTTONUP: //是右击 + { + CMenu mMenu, * pMenu = NULL; + CPoint pt; + mMenu.LoadMenu(IDR_TRAY_MENU); //加载右击弹出的菜单 + pMenu = mMenu.GetSubMenu(0); + GetCursorPos(&pt); + SetForegroundWindow(); + pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this); + break; + } + case WM_LBUTTONDBLCLK: //鼠标左键双击 + if (IsIconic() == TRUE) //获取是否是最小化 + { + ShowWindow(SW_SHOWNORMAL); + } + else + { + ShowWindow(SW_SHOW); + } + SetForegroundWindow(); + break; + + default: + break; + } + return LRESULT(); +} + +//最小化窗口 +VOID CaikeDlg::MinClick(int id) +{ + ShowWindow(SW_HIDE); +} + +//最大化窗口 +VOID CaikeDlg::MaxClick(int id) +{ + ShowWindow(SW_MAXIMIZE); + ShowButton(2,FALSE); + ShowButton(3, TRUE); +} + +//还原窗口 +VOID CaikeDlg::ReductionClick(int id) +{ + ShowWindow(SW_RESTORE); + ShowButton(2, TRUE); + ShowButton(3, FALSE); +} + +//关闭窗口 +VOID CaikeDlg::CloseClick(int id) +{ + if (MessageBox(_T("确定退出本软件?"), _T("温馨提示"), MB_OKCANCEL) == IDOK) + { + CDialogEx::OnCancel(); + } +} + +//TCP连接状态 +VOID CaikeDlg::TCPState(int type) +{ + CStringA str = "nihao"; + switch (type) + { + case -1: //连接失败 + MessageBox(_T("连接失败")); + break; + case 0: //连接成功 + //SClien.Send(str, str.GetLength()); + break; + case 1: //连接中断 + + break; + default: + break; + } +} + +//处理SOCKET消息 +VOID CaikeDlg::Process() +{ + //CStringA str; + //CString tmp; + //SClien.GetMsg(str); + //Json json; + //int lenth = json.parse(str); + //while (lenth != -1) + //{ + // SClien.RemoveMsg(lenth); + // Process(json); + // if (str.GetLength() == lenth) + // { + // return; + // } + // SClien.GetMsg(str); + // lenth = json.parse(str); + //} + //return; +} + +//处理SOCKET消息 +VOID CaikeDlg::Process(Json json) +{ + +} + +VOID CaikeDlg::text(int id) +{ + +} + + + diff --git a/aike/aikeDlg.h b/aike/aikeDlg.h new file mode 100644 index 0000000..7c93349 --- /dev/null +++ b/aike/aikeDlg.h @@ -0,0 +1,64 @@ + +// aikeDlg.h: 头文件 +// + +#pragma once + +// CaikeDlg 对话框 +class CaikeDlg : public CDialogEx,MyDialog +{ +// 构造 +public: + CaikeDlg(CWnd* pParent = nullptr); // 标准构造函数 + +// 对话框数据 +#ifdef AFX_DESIGN_TIME + enum { IDD = IDD_AIKE_DIALOG }; +#endif + + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 + + +// 实现 +protected: + HICON m_hIcon; + + // 生成的消息映射函数 + virtual BOOL OnInitDialog(); + afx_msg void OnPaint(); + afx_msg HCURSOR OnQueryDragIcon(); + DECLARE_MESSAGE_MAP() +public: + //变量 + ADOSQL AdoSql; //连接数据库 + SocketClien SClien; //连接服务器 + CString m_Path; //本程序路径 + CString ServerIP = _T("sr.nceissoft.com"); //服务器IP + UINT ServerProt = 1995; //服务器端口 + CString DataBase = _T("aike"); //数据库名称 + CString UserName = _T("sa"); //数据库用户名 + CString AdoPass = _T("Ncsr88352518"); //数据库密码 + + //MFC回调函数 + virtual BOOL PreTranslateMessage(MSG* pMsg); //截获窗口消息 + afx_msg void OnSize(UINT nType, int cx, int cy); //窗口大小发生改变 + afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI); //设置窗口最大和最小范围 + virtual void OnOK(); //按下回车 + afx_msg void OnDestroy(); //窗口即将销毁 + afx_msg void OnShowMenu(); //显示窗口(托盘消息) + afx_msg void OnCloneMenu(); //关闭窗口(托盘消息) + + //自己创建的函数 + VOID Initialize(); //初始化 + BOOL TrayMylcon(BOOL bAdd); //添加系统托盘 + LRESULT OnTrayCallBackMsg(WPARAM wparam, LPARAM lparam); //点击系统托盘响应事件 + VOID MinClick(int id); //最小化窗口 + VOID MaxClick(int id); //最大化窗口 + VOID ReductionClick(int id); //还原窗口 + VOID CloseClick(int id); //关闭窗口 + VOID TCPState(int type); //TCP连接状态 + VOID Process(); //处理SOCKET消息 + VOID Process(Json json); //处理SOCKET消息 + VOID text(int id); +}; diff --git a/aike/framework.h b/aike/framework.h new file mode 100644 index 0000000..5672fb5 --- /dev/null +++ b/aike/framework.h @@ -0,0 +1,49 @@ +#pragma once + +#ifndef VC_EXTRALEAN +#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料 +#endif + +#include "targetver.h" + +#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的 + +// 关闭 MFC 的一些常见且经常可放心忽略的隐藏警告消息 +#define _AFX_ALL_WARNINGS + +#include <afxwin.h> // MFC 核心组件和标准组件 +#include <afxext.h> // MFC 扩展 + + +#include <afxdisp.h> // MFC 自动化类 + + + +#ifndef _AFX_NO_OLE_SUPPORT +#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持 +#endif +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include <afxcmn.h> // MFC 对 Windows 公共控件的支持 +#endif // _AFX_NO_AFXCMN_SUPPORT + +#include <afxcontrolbars.h> // MFC 支持功能区和控制条 + + + + + + + + + +#ifdef _UNICODE +#if defined _M_IX86 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") +#elif defined _M_X64 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") +#else +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") +#endif +#endif + + diff --git a/aike/pch.cpp b/aike/pch.cpp new file mode 100644 index 0000000..b6fb8f4 --- /dev/null +++ b/aike/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: 与预编译标头对应的源文件 + +#include "pch.h" + +// 当使用预编译的头时,需要使用此源文件,编译才能成功。 diff --git a/aike/pch.h b/aike/pch.h new file mode 100644 index 0000000..9425adc --- /dev/null +++ b/aike/pch.h @@ -0,0 +1,23 @@ +// pch.h: 这是预编译标头文件。 +// 下方列出的文件仅编译一次,提高了将来生成的生成性能。 +// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 +// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 +// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 + +#ifndef PCH_H +#define PCH_H + +// 添加要在此处预编译的标头 +#include "framework.h" + +#include "D:/代码/ToolsLib/ToolsLib/ToolsLib.h" + +#ifdef _DEBUG +#pragma comment(lib,"D:/代码/ToolsLib/x64/Debug/ToolsLib.lib") +#else +#pragma comment(lib,"D:/代码/ToolsLib/x64/Release/ToolsLib.lib") +#endif + + + +#endif //PCH_H diff --git a/aike/res/0.jpg b/aike/res/0.jpg new file mode 100644 index 0000000..4d318f0 Binary files /dev/null and b/aike/res/0.jpg differ diff --git a/aike/res/1.jpg b/aike/res/1.jpg new file mode 100644 index 0000000..1c8dec2 Binary files /dev/null and b/aike/res/1.jpg differ diff --git a/aike/res/Booking.jpg b/aike/res/Booking.jpg new file mode 100644 index 0000000..0c44b28 Binary files /dev/null and b/aike/res/Booking.jpg differ diff --git a/aike/res/Booking1.jpg b/aike/res/Booking1.jpg new file mode 100644 index 0000000..e51026d Binary files /dev/null and b/aike/res/Booking1.jpg differ diff --git a/aike/res/aike.ico b/aike/res/aike.ico new file mode 100644 index 0000000..d56fbcd Binary files /dev/null and b/aike/res/aike.ico differ diff --git a/aike/res/aike.rc2 b/aike/res/aike.rc2 new file mode 100644 index 0000000..1ec062e Binary files /dev/null and b/aike/res/aike.rc2 differ diff --git a/aike/res/background.jpg b/aike/res/background.jpg new file mode 100644 index 0000000..9645a20 Binary files /dev/null and b/aike/res/background.jpg differ diff --git a/aike/res/basis.jpg b/aike/res/basis.jpg new file mode 100644 index 0000000..7a221f3 Binary files /dev/null and b/aike/res/basis.jpg differ diff --git a/aike/res/basis1.jpg b/aike/res/basis1.jpg new file mode 100644 index 0000000..bb9df53 Binary files /dev/null and b/aike/res/basis1.jpg differ diff --git a/aike/res/business.jpg b/aike/res/business.jpg new file mode 100644 index 0000000..fca1511 Binary files /dev/null and b/aike/res/business.jpg differ diff --git a/aike/res/business1.jpg b/aike/res/business1.jpg new file mode 100644 index 0000000..c173d08 Binary files /dev/null and b/aike/res/business1.jpg differ diff --git a/aike/res/inventory.jpg b/aike/res/inventory.jpg new file mode 100644 index 0000000..62edb47 Binary files /dev/null and b/aike/res/inventory.jpg differ diff --git a/aike/res/inventory1.jpg b/aike/res/inventory1.jpg new file mode 100644 index 0000000..22631cd Binary files /dev/null and b/aike/res/inventory1.jpg differ diff --git a/aike/res/member.jpg b/aike/res/member.jpg new file mode 100644 index 0000000..97f740c Binary files /dev/null and b/aike/res/member.jpg differ diff --git a/aike/res/member1.jpg b/aike/res/member1.jpg new file mode 100644 index 0000000..3fa00f4 Binary files /dev/null and b/aike/res/member1.jpg differ diff --git a/aike/res/report.jpg b/aike/res/report.jpg new file mode 100644 index 0000000..c9d05e0 Binary files /dev/null and b/aike/res/report.jpg differ diff --git a/aike/res/report1.jpg b/aike/res/report1.jpg new file mode 100644 index 0000000..e56f633 Binary files /dev/null and b/aike/res/report1.jpg differ diff --git a/aike/resource.h b/aike/resource.h new file mode 100644 index 0000000..8f526d4 --- /dev/null +++ b/aike/resource.h @@ -0,0 +1,22 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ 生成的包含文件。 +// 供 aike.rc 使用 +// +#define IDR_TRAY_MENU 1 +#define IDD_AIKE_DIALOG 102 +#define IDR_MAINFRAME 128 +#define ID_32771 32771 +#define ID_32772 32772 +#define ID_SHOW_MENU 32773 +#define ID_CLONE_MENU 32774 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 132 +#define _APS_NEXT_COMMAND_VALUE 32775 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/aike/targetver.h b/aike/targetver.h new file mode 100644 index 0000000..79934a3 --- /dev/null +++ b/aike/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。 + +//如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并 +// 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。 + +#include <SDKDDKVer.h>