windows开发技术 mfc浅谈

简介: windows开发技术 mfc浅谈

本篇文章我们来介绍一下mfc相关领域的知识

MFC(Microsoft Foundation Classes)是微软公司提供的一套C++类库,用于开发基于Windows平台的桌面应用程序。它是建立在Windows API之上的一个封装层,旨在简化Windows应用程序的开发过程。

MFC提供了许多类和函数,用于处理窗口、消息循环、控件、对话框、菜单等常见的GUI操作。开发者可以使用MFC来创建具有图形界面的Windows应用程序,并通过响应用户输入和系统消息来实现交互和功能。

通过MFC,开发者可以利用封装好的类和函数快速搭建和管理Windows应用程序的各个组件,而无需直接调用底层API。MFC还提供了许多工具和辅助函数,方便进行资源管理、数据持久化、线程处理等操作。

需要注意的是,MFC主要适用于传统的桌面应用程序开发,在新兴的跨平台和移动开发领域,并不是首选框架。但对于仍然需要在Windows平台上进行桌面应用程序开发的项目,MFC仍然是一个成熟且可行的选择。

mfc基本对话框程序代码实例:

// MyDialog.h
#pragma once
#include <afxwin.h>
class MyDialog : public CDialog {
public:
    MyDialog(CWnd* pParent = nullptr);
    // 对话框数据
    #ifdef AFX_DESIGN_TIME
        enum { IDD = IDD_MYDIALOG };
    #endif
protected:
    virtual void DoDataExchange(CDataExchange* pDX);  // DDX/DDV 支持
    // 消息映射函数
    afx_msg void OnButtonClicked();
    DECLARE_MESSAGE_MAP()
};
// MyDialog.cpp
#include "MyDialog.h"
IMPLEMENT_DYNAMIC(MyDialog, CDialog)
MyDialog::MyDialog(CWnd* pParent) : CDialog(IDD_MYDIALOG, pParent) {}
void MyDialog::DoDataExchange(CDataExchange* pDX) {
    CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(MyDialog, CDialog)
    ON_BN_CLICKED(IDC_BUTTON1, &MyDialog::OnButtonClicked)
END_MESSAGE_MAP()
void MyDialog::OnButtonClicked() {
    MessageBox(L"Hello, MFC!");
}
// Main.cpp
#include "MyApp.h"
CMyApp theApp;
BOOL CMyApp::InitInstance() {
   // 初始化 MFC 控制台
   if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {
       return FALSE;
   }
   // 创建对话框并显示
   MyDialog dlg;
   m_pMainWnd = &dlg;
   INT_PTR nResponse = dlg.DoModal();
   return FALSE;
}

上述代码中,MyApp 类继承自 CWinApp,并在 InitInstance 方法中初始化 MFC 控制台。MyDialog 类继承自 CDialog,表示一个对话框窗口,并通过资源文件(如 IDD_MYDIALOG)进行界面布局。在对话框类中,我们定义了消息映射函数 OnButtonClicked(),它将在按钮被点击时触发,并显示一个消息框。

mfc常用的网络编程相关函数:

在MFC中进行网络编程时,可以使用以下一些常用的函数和类:

  1. CSocket 类:表示一个套接字,用于建立与服务器的连接、发送和接收数据等操作。
  • Create():创建一个套接字对象。
  • Connect():与指定的服务器建立连接。
  • Send():发送数据到已连接的套接字。
  • Receive():从已连接的套接字接收数据。
  1. CAsyncSocket 类:继承自CSocket,支持异步方式进行套接字操作。它提供了一组异步回调函数,以处理非阻塞的套接字通信。
  2. CInternetSession 类:用于创建与互联网之间的会话,并提供了许多函数来执行HTTP请求、FTP传输等操作。
  3. CHttpFile 类:通过HTTP协议进行文件传输时使用。可以打开远程文件、读取内容、写入内容等。
  4. CFtpConnection 类:通过FTP协议进行文件传输时使用。可以连接到FTP服务器、上传和下载文件等。
  5. CInternetFile 类:通过URL访问远程文件时使用。可以打开远程文件、读取内容等。

网络编程代码实例:

// MySocketDlg.h
#pragma once
#include <afxsock.h>
class CMySocketDlg : public CDialogEx
{
public:
    CMySocketDlg(CWnd* pParent = nullptr);
    virtual ~CMySocketDlg();
protected:
    HICON m_hIcon;
    CSocket m_socket;
    // Generated message map functions
    virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
private:
    void ConnectToServer();
};
// MySocketDlg.cpp
#include "MySocketDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CMySocketDlg::CMySocketDlg(CWnd* pParent /*=nullptr*/)
  : CDialogEx(IDD_MYSOCKET_DIALOG, pParent)
{
  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMySocketDlg::DoDataExchange(CDataExchange* pDX)
{
  CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CMySocketDlg, CDialogEx)
  ON_WM_PAINT()
  ON_WM_QUERYDRAGICON()
END_MESSAGE_MAP()
BOOL CMySocketDlg::OnInitDialog()
{
  CDialogEx::OnInitDialog();
  SetIcon(m_hIcon, TRUE);     // Set big icon
  SetIcon(m_hIcon, FALSE);    // Set small icon
  
  return TRUE;  
}
void CMySocketDlg::OnPaint()
{
  if (IsIconic())
  {
    CPaintDC dc(this); // device context for painting
    
    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 CMySocketDlg::OnQueryDragIcon()
{
  return static_cast<HCURSOR>(m_hIcon);
}
void CMySocketDlg::ConnectToServer()
{
    if (m_socket.Create())
    {
        if (m_socket.Connect(_T("127.0.0.1"), 12345)) // 这里替换成服务器的 IP 地址和端口号
        {
            CString strSend = _T("Hello, Server!");
            m_socket.Send(strSend.GetBuffer(), strSend.GetLength());
            char buffer[1024] = { 0 };
            int nReceived = m_socket.Receive(buffer, sizeof(buffer));
            if (nReceived > 0)
            {
                CString strReceived(buffer);
                // 处理接收到的数据
                
                AfxMessageBox(strReceived);
            }
        }
        else
        {
            AfxMessageBox(_T("Failed to connect to server!"));
        }
        m_socket.Close();
    }
    else
    {
        AfxMessageBox(_T("Failed to create socket!"));
    }
}
// 调用 ConnectToServer() 函数来进行连接和数据发送接收

好了 本篇文章就到这里 学无止境 祝大家最后都能拿到一个理想的offer

在这里小编想向大家推荐一篇文章:

https://xxetb.xetslk.com/s/2PjJ3T

祝大家胜过愉快!

相关文章
|
29天前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
26 0
|
1月前
|
Ubuntu Linux Python
如何利用wsl-Ubuntu里conda用来给Windows的PyCharm开发
如何在WSL(Windows Subsystem for Linux)的Ubuntu环境中使用conda虚拟环境来为Windows上的PyCharm开发设置Python解释器。
63 0
|
2月前
|
存储 安全 程序员
Windows任务管理器开发原理与实现
Windows任务管理器开发原理与实现
|
3月前
|
vr&ar C# 图形学
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
68 0
|
3月前
|
开发者 C# Windows
WPF与游戏开发:当桌面应用遇见游戏梦想——利用Windows Presentation Foundation打造属于你的2D游戏世界,从环境搭建到代码实践全面解析新兴开发路径
【8月更文挑战第31天】随着游戏开发技术的进步,WPF作为.NET Framework的一部分,凭借其图形渲染能力和灵活的UI设计,成为桌面游戏开发的新选择。本文通过技术综述和示例代码,介绍如何利用WPF进行游戏开发。首先确保安装最新版Visual Studio并创建WPF项目。接着,通过XAML设计游戏界面,并在C#中实现游戏逻辑,如玩家控制和障碍物碰撞检测。示例展示了创建基本2D游戏的过程,包括角色移动和碰撞处理。通过本文,WPF开发者可更好地理解并应用游戏开发技术,创造吸引人的桌面游戏。
179 0
|
3月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
242 0
|
3月前
|
开发者 iOS开发 C#
Uno Platform 入门超详细指南:从零开始教你打造兼容 Web、Windows、iOS 和 Android 的跨平台应用,轻松掌握 XAML 与 C# 开发技巧,快速上手示例代码助你迈出第一步
【8月更文挑战第31天】Uno Platform 是一个基于 Microsoft .NET 的开源框架,支持使用 C# 和 XAML 构建跨平台应用,适用于 Web(WebAssembly)、Windows、Linux、macOS、iOS 和 Android。它允许开发者共享几乎全部的业务逻辑和 UI 代码,同时保持原生性能。选择 Uno Platform 可以统一开发体验,减少代码重复,降低开发成本。安装时需先配置好 Visual Studio 或 Visual Studio for Mac,并通过 NuGet 或官网下载工具包。
272 0
|
3月前
|
iOS开发 Android开发 MacOS
从零到全能开发者:解锁Uno Platform,一键跨越多平台应用开发的神奇之旅,让你的代码飞遍Windows、iOS、Android、macOS及Web,技术小白也能秒变跨平台大神!
【8月更文挑战第31天】从零开始,踏上使用Uno Platform开发跨平台应用的旅程。只需编写一次代码,即可轻松部署到Windows、iOS、macOS、Android及Web(通过WASM)等多个平台。Uno Platform为.NET生态带来前所未有的灵活性和效率,简化跨平台开发。首先确保安装了Visual Studio或VS Code及.NET SDK,然后选择合适的项目模板创建新项目。项目结构类似传统.NET MAUI或WPF项目,包含核心NuGet包。通过简单的按钮示例,你可以快速上手并构建应用。Uno Platform让你的技术探索之旅充满无限可能。
68 0
|
3月前
|
Kubernetes Cloud Native 开发者
探索云原生技术:Kubernetes入门与实践探索Windows操作系统的隐藏功能
【8月更文挑战第31天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性、效率和可靠性的关键。本文将带你了解云原生的核心组件之一——Kubernetes(K8s),通过浅显易懂的语言和实际代码示例,引导你步入这一强大工具的世界。无论你是初学者还是有经验的开发者,本篇都将为你打开一扇通向高效资源管理与自动化部署的大门。
|
4月前
|
Linux Apache C++
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
该文介绍了如何在Windows环境下为FFmpeg集成SRT协议支持库libsrt。首先,需要安装Perl和Nasm,然后编译OpenSSL。接着,下载libsrt源码并使用CMake配置,生成VS工程并编译生成srt.dll和srt.lib。最后,将编译出的库文件和头文件按照特定目录结构放置,并更新环境变量,重新配置启用libsrt的FFmpeg并进行编译安装。该过程有助于优化直播推流的性能,减少卡顿问题。
118 2
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt