
Visual C++ 网络编程
eyetired
这个作者很懒,什么都没留下…
展开
-
Visual C++网络编程经典案例详解 第9章 实用播放器 数据读取与播放控制 识别数据文件信息
识别数据文件信息主要是指对mp3数据格式识别定义顺序代码如下typedef struct mp3_struct //自定义mp3结构体{ char heade[3]; //tag字符标记 char title[30]; //音乐文件名称 char arti[30]; //演唱者 char alb[30]; //专辑 char year[4]; //出版年份 char text[2...原创 2020-03-07 09:05:44 · 359 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 数据读取与播放控制 保存数据 判断文件添加列表
MP3文件相关信息显示在当前播放列表最后表示mp3文件是用户最近添加到程序... //省略部分代码int nRow = m_list.InsertItem(m_list.GetItemCount()+1,mp3.title) //插入行m_list.SetItemText(nRow,1,mp3.arti) //设置数据if(mp3.heade && "TAG") //判断...原创 2020-02-21 18:36:42 · 354 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 数据读取与播放控制 保存数据 文件标题关联歌曲文件路径 显示到列表控件
如果打开 对话框 选择需要添加的歌曲后创建文件对象关联 歌曲列表 以及 通过 文件打开对话框 选择的文件从mp3文件中读取相关信息到结构体变量mp3把变量内容写入 歌曲列表 文件存储... //省略部分代码CFile file1("歌曲列表.lw",CFile::modeReadWrite); //创建文件对象并关联该文件POSITION pt=filed.GetStartPosit...原创 2020-02-10 08:18:10 · 189 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 数据读取与播放控制 保存数据
添加歌曲 按钮 添加歌曲添加按钮添加消息响应函数void CMyDlg::OnAdd(){ CString strpath="MP3音乐(*.mp3){*.mp3||}";//过 滤文件列表 CFileDialog filed(true,NULL,NULL,OFN_HIDEREADONLY,strpath,NULL); //创建文件对象并打开 if(filed.DoModal()==...原创 2020-01-19 19:20:30 · 207 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 数据读取与播放控制 读取数据 操作歌曲列表文件
程序启动创建文件对象 从文件读取数据如果文件对象为空 表示程序第一次启动 需要用户创建文件否则 程序读取数据 并显示在控件列表Visual C++网络编程经典案例详解如果文件对象句柄为空 表示文件不存在 需要新建文件否则 用户可以对文件进行读取操作while(mpd.title!=NULL) //判断获取的文件标题{ file1.Read(&mpd,sizeof(mpd)...原创 2020-01-04 08:22:23 · 157 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 数据读取与播放控制 读取数据 封装曲目数据结构
数据封装在一个结构体中结构体命名为mp3data结构定义如下typedef struct mp3 //定义mp3文件数据结构体{ char heade[3]; //TAG字符标记 char title[30]; //音乐文件名称 char arti[30]; //演唱者 CString str; //路径字符串}mp3data;结构体,主要成员变量str其MP3文件完整路径...原创 2019-12-26 18:43:20 · 176 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 多线程通信 线程间通信 根据播放列表音乐序号判断mp3播放顺序
根据播放列表音乐序号判断mp3播放顺序定义一个整形变量indexint index=0;在列表控件双击消息处理函数OnDblclkList2()中将列表选择项的索引赋值给indexvoid CMyDlg::OnDblclkList2(NMHDR* pNMHDR, LRESULT* pResult){ ... //省略部分代码 POSITION pos=m_list.GetFirs...原创 2019-12-20 23:27:32 · 152 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 多线程通信 线程分配 根据文件播放进度设置进度条位置
播放mp3 也启动进度条设置线程根据文件播放进度设置进度条位置DWORD WINAPI setprocess(LPVOID lpParameter){ CString str,str1; //定义字符串变量 char ch[100]; //定义字符数组 MCI_STATUS_PARMS stat={0}; //定义并初始化结构体变量 stat.dwItem=MCI_STATUS_LE...原创 2019-12-13 18:10:48 · 176 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 多线程通信 线程分配 进度条设置进程
函数OnPlay()调用函数CreateThread()创建进度条设置线程并启动void CMyDlg::OnPlay(){ ... //省略部分代码 HANDLE h; h=::CreateThread(NULL,0,setprocess,this->m_hWnd,0,NULL); //创建进度条设置线程 ... //省略部分代码}setprocess 要设置成全局函数...原创 2019-12-05 23:11:10 · 173 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 多线程通信 线程分配 播放mp3
多线程可以使程序同时处理多个文件或实现多个功能还可以防止程序出现资源共享问题mciSendCommand()打开音频设备播放mp3void CMyDlg::OnPlay() //播放按钮消息响应函数{ MCI_OPEN_PARMS open={0}; //大约初始化结构体 cjar str1[100]; //定义字符数组 open.lpstrElementName="F:\\大约在...原创 2019-12-02 08:44:59 · 203 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 添加消息映射 使用消息映射宏 消息映射宏
DECLARE_MESSAGE_MAP BEGIN_MESSAGE_MAP以及 END_MESSAGE_MAP 部分定义代码如下#define DECLARE_MESSAGE_MAP() //定义消息宏DECLARE_MESSAGE_MAPprivate: static const AFX_MSGMAP_ENTRY _messageEntries[]; protected: stat...原创 2019-11-28 19:27:43 · 174 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 添加消息映射 mfc消息映射表
作用将用户对控件的一些操作消息与消息的响应函数关联消息映射宏中消息响应函数必须首先在窗口类进行声明用户消息响应函数ONnot()声明class CMy121Dlg : public CDialog{ protected: virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg void ONnot(); //消息响...原创 2019-11-22 06:38:01 · 152 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 状态栏 显示当前时间
用户编写过程中需要在状态栏上显示信息直接用状态栏句柄statu用户在状态栏内显示系统当前时间void CMyDlg::OnTimer(UINT nIDEvent){ CTime time; //定义时间类对象 time.GetCurrentTime(); //获取系统当前时间 CString str=time.Format("当前时间: % H: % M: %S"); //格式化字...原创 2019-11-20 20:56:40 · 234 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 状态栏 显示相关消息
wID指定状态栏窗口ID#define IDC_123 3251用户在窗口中创建一个状态栏用于显示相关消息头文件中定义状态栏句柄代码如下class CMyDlg : public CDialog //主窗口类定义{ public: CMyDlg(CWnd* pParent = NULL); HWND statu; //定义状态栏句柄 ... //省略部分代码}窗口初始化...原创 2019-11-18 22:48:59 · 162 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 状态栏
用户在程序中创建状态栏应该首先定义状态栏句柄对象statuOnInitDialog()中使用api函数创建状态栏并返回其句柄HWND CreateStatusWindow( LONG style; LPCTSTR lpszText, HWND hwndParent, UINT wID);函数作用创建状态栏对象并返回其句柄style表示状态栏创建时所指定的窗口样式lpszTe...原创 2019-11-14 15:36:22 · 152 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 进度条 状态栏 进度条 SetStep() 和 StepIt()
设置进度条位置的步进变化SetStep() StepIt()原型int SetStep(int nStep);int StepIt();使进度条每次前进5个单位... //省略部分代码m_process.SetRange32(0,100); //设置进度条作用范围0~100int i=m_process.GetPos(); //获取当前位置索引m_process.SetPos(i...原创 2019-11-10 07:06:43 · 695 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 进度条 状态栏 进度条 GetPos() SetPos()
原型如下int GetPos(); //获取进度条当前位置int SetPos(int nPos); //设置进度条当前位置使进度条的当前位置前进10个单位索引代码如下... //省略部分代码m_process.SetRange32(0,100); //设置进度条作用范围0~100int i=m_process.GetPos(); //获得当前位置索引m_process.SetP...原创 2019-11-06 22:00:52 · 429 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 进度条 状态栏 进度条 SetRange32()
控件类是CProgressCtrl函数是 SetRange32()原型如下void SetRange32(int nLower,int nUpper);参数最小值 最大值进度条作用范围设置0~100m_process.SetRange32(0,100);原创 2019-11-04 08:17:17 · 664 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 tab控件初始化 列表控件初始化
关联CListctrl对象名称设置为m_list初始化函数OnInitDialog()中调用CListctrl类函数进行初始化BOOL CMyDlg::OnInitDialog(){ CDialog::OnInitDialog(); ... //省略部分代码 LVCOLUMN lv; //定义LVCOLUMN结构变量 lv.mask=LVCF_TEXT|LVCF_FMT|LVCF...原创 2019-11-02 11:59:52 · 163 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 tab控件初始化 属性页添加控件
控件id 控件类型 控件作用IDC_LIST2 列表控件 显示歌曲列表IDC_SOUSUOMULU 按钮控件 搜索本目录下歌曲IDC_SOUSUOMULU2 按钮控件 搜索本地所有歌曲属性页为播放列表时只有列表控件显示如果属性页发生改变会发送TCN_SELCHANGE消息根据响应消息调整控件显示状态void CMyDlg::OnSelchangeTab1(NMHDR* pNMHD...原创 2019-10-31 20:45:56 · 133 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 tab控件初始化 添加两个属性页
添加两个属性页BOOL CMyDlg::OnInitDialog(){ CDialog::OnInitDialog(); ... //省略部分代码 m_tab.insertItem(TCIF_TEXT,0,"播放列表",NULL,NULL); //添加播放列表属性页 m_tab.insertItem(TCIF_TEXT,1,"搜索歌曲",NULL,NULL); //添加搜索歌曲属性...原创 2019-10-29 20:01:24 · 133 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 tab控件初始化 InsertItem()原型
如果启动后没有响应歌曲则tab控件提示用户 播放器没有歌曲要添加歌曲否则播放歌曲添加成员变量对话框修改变量名称为m_tab使用CTabCtrl类对象m_tab在TAB控件中添加属性页InsertItem()原型BOOL InsertItem(UINT nMask,int nItem,LPCTSTR lpszItem,int nImage,LPARAM lParam);nMask...原创 2019-10-26 23:09:15 · 180 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 图片控件初始化 初始化
窗口初始化函数进行初始化class CMyDlg: public CDialog{ public: CMyDlg(CWnd* pParent = NULL); HBITMAP bit; //位图句柄 HDC dc1; //兼容DC ...//省略部分代码}BOOL CMyDlg::OnInitDialog(){ CDialog::OnInitDialog(); Se...原创 2019-10-22 14:03:26 · 149 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 图片控件初始化
如果用户要一直显示图片用户将代码加到 CMyDlg::OnPaint()窗口重新绘制,会重新绘制图片void CMyDlg::OnPaint(){ if(IsIconic()) { CPaintDC dc(this); //定义设备上下文对象 SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0); ... //省略...原创 2019-10-19 23:05:03 · 134 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 图片控件初始化 显示位图
显示一张位图 位图资源ID IDB_BITMAP1... //省略部分代码bit=::LoadBitmap(AfxGetApp()->m_HInstance,MAKEINTRESOURCE(IDC_BITMAP1));//读取位图资源并返回句柄dc1=::CreateCompatibleDC(::GetDC(::GetDlgItem(this->m_hWnd,IDC_TUPIA...原创 2019-10-17 23:02:56 · 152 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 图片控件初始化 函数StretchBlt原型
美化界面 让图片显示函数StretchBlt()原型BOOL StretchBlt( HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, i...原创 2019-10-15 20:44:59 · 150 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第9章 实用播放器 界面初始化 控件初始化 禁用播放按钮
在OnInitDialog()实现GetDlgItem()获取控件指针调用函数EnableWindow()禁用控件BOOL CMyDlg::OnInitDialog(){ CDialog::OnInitDialog(); SetIcon(m_hIcon,TRUE); SetIcon(m_hIcon,FALSE); GetDlgItem(IDC_PLAY)->EnableWin...原创 2019-10-13 16:30:20 · 137 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第3章 多线程与异步套接字编程 实现线程同步 临界区对象 使用API函数操作临界区
临界区对象是指当用户使用某个线程代码访问共享资源时必须使代码独享该资源不允许其他线程程序访问该资源带该代码段访问完资源后其他程序才能对资源进行访问好像试衣间 要一个人用完 其他人才能用#include <windows.h> //包含头文件#include <stdio.h>DWORD WINAPI...原创 2018-09-17 07:32:07 · 152 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第3章 多线程与异步套接字编程 实现线程同步 事件对象 使用API函数操作事件对象
事件对象指用户在程序中使用内核对象的有无信号状态实现线程的同步使用事件对象实现线程同步编程#include <windows.h> //包含头文件#include <stdio.h>DWORD WINAPI myfun1(LPVOID lpParameter);//声明线程函数DWORD WINAPI m...原创 2018-09-17 08:14:41 · 187 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第3章 多线程与异步套接字编程 实现线程同步 事件对象 使用CEvent类实现线程同步
创建一个控制台工程 名字为MFC事件对象Use MFC in a static LibraryCEvent类是MFC中支持事件对象编程的类CEvent(BOOL bInitiallyOwn = FALSE,BOOL bManualReset = FALSE,LPCTSTRlpszName = NULL, LPSECURITY_ATTRIBUTES lpsaAttribute = NUL...原创 2018-09-17 09:04:49 · 264 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第3章 多线程与异步套接字编程 实现线程同步 临界区对象 使用CCriticalSection类操作临界区
弄个控制台 名字mfc临界区use mfc in a static libraryCCriticalSection类是MFC中所定义的临界区类其作用与临界区相关API函数实现的功能一样用户编程时为了方便访问CCriticalSection类对象将对象定义为全局变量用Lock()函数锁定临界区程序进入临界区执行相关功能并获得临界区的所有权Unlock()离开临界区并释放所有权...原创 2018-09-17 07:40:45 · 187 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第3章 多线程与异步套接字编程 实现线程同步 互斥对象 使用API函数操作互斥对象
互斥对象和临界区对象和事件对象作用一样用于实现线程同步互斥对象可以在线程中使用CreateMutex()创建并返回互斥对象 原型如下HANDLE CreateMutex( LPSECURITY_ATTIRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName);调用成功 返回新创建的互斥对象句柄否则 返...原创 2018-09-17 09:44:24 · 187 阅读 · 0 评论 -
error C2440: “static_cast”: 无法从“void (__thiscall CXPButton::* )(WPARAM,LPARAM)”转换为“LRESULT (__thisca
这个有用 试过了 vc6.0转成vs2012工程原贴地址https://blog.youkuaiyun.com/kulala082/article/details/53488873 afx_msg LRESULT OnSocket(WPARAM wParam,LPARAM lParam);就是onSocket的函数值返回类型要改一下LRESULT CTCPDlg::OnSocke...原创 2018-09-15 10:09:06 · 653 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第2章 Winsock网络程序开发流程 基于TCP的Sockets编程 TCP服务器
新建一个控制台程序tcpserver.cpp#include<winsock2.h>#include<stdio.h>#include<windows.h>#pragma comment(lib,"WS2_32.lib") //连接套接字库int main()//主函数{ WSADATA data; //定义结构体对象 WORD ...原创 2018-09-15 13:03:29 · 245 阅读 · 0 评论 -
Visual C++ 网络编程经典案例详解 第2章 Winsock网络程序开发流程 基于TCP的Sockets编程 TCP客户端
VC创建基于控制台应用程序命名为 TCP客户端 TCPClient.cpp#include<winsock2.h> //包含头文件#include<stdio.h>#include<windows.h>#pragma comment(lib,"WS2_32.lib") //显式...原创 2018-09-15 13:10:21 · 303 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第2章 Winsock网络程序开发流程 基于UDP的Sockets编程 UDP服务器
vc创建控制台程序窗口的应用程序命名为 UDP服务器UDPSever.cpp#include<winsock2.h>#include<stdio.h>#include<windows.h>#pragma comment(lib,"WS2_32.lib")int main(){ WSADATA data; //定义结构体变量 W...原创 2018-09-15 13:23:03 · 475 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第2章 Winsock网络程序开发流程 基于UDP的Sockets编程 UDP客户端
在VC中创建UDP客户端程序控制台#include<winsock2.h>#include<stdio.h>#include<windows.h>#pragma comment(lib,"WS2_32.lib")int main(){ WSADATA data; WORD w=MAKEWORD(2,0); char sz...原创 2018-09-16 08:52:23 · 283 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第3章 多线程与异步套接字编程 实现线程同步 互斥对象 使用CMutex类
创建控制台工程 use mfc in the static libraryCMutex类是MFC中互斥对象类由CSyncObject派生使用CMutex类可调用父类CSyncObject成员函数构建CMutex由构造函数实现CMutex(BOOL bInitiallyOwn=FALSE,LPCTSTR lpszName=NULL,LPSECURITY_ATTRIBUTESlpsa...原创 2018-09-17 10:24:36 · 223 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第3章 多线程与异步套接字编程 实现线程同步 互斥对象 程序的唯一运行
互斥对象可在进程中使用用户在进程创建互斥对象实现程序实例唯一运行创建控制台工程#include<windows.h> //包含头文件#include<stdio.h>int main() //主函数{...原创 2018-09-17 12:02:38 · 169 阅读 · 0 评论 -
Visual C++网络编程经典案例详解 第3章 多线程与异步套接字编程 进程间通信 油槽
油槽是Windows系统提供单向通信的机制进程中一方只能写入或读取数据另一方只能读取和写入数据通过油槽用户可以实现一对多或跨网络的进程自己的通信当油槽传输的数据非常小一般400kb用户操作数据过大 可能导致油槽不能正常工作弄控制台 弄c++源文件 #include<windows.h> ...原创 2018-09-18 07:58:16 · 278 阅读 · 0 评论