自己动手开发音乐播放器(2)附加界面的搭建
自己动手开发音乐播放器(二)附加界面的搭建
昨天搭建好了,主界面,今天依然要搭建界面,我想首先将基本的界面搭建好,然后再一步一步实现音乐播放器的功能
昨天搭建好的主界面
今天需要搭建两个界面,一个是退出界面,一个是关于界面,对于这两个界面,我想大家不会陌生,如退出QQ时,就会出现一个退出界面,提示是退出还是最小化托盘,关于界面是显示音乐播放器的信息,言归正传
首先打开昨天搭建好的主界面
选择Dialog文件夹,并且单击鼠标右键
选择插入Dialog
插入Dialog后的界面
修改对话框的名字和ID
将鼠标移到对话框上并且单击鼠标右键
选择属性
将ID改为IDD_ABOUT 标题改为 关于
修改后的效果
搭建好后就开始写代码
选择文件-----新建-----C++ Source file 输入 AboutDlg 单击确定
在AboutDlg.cpp中添加下面代码
#include "stdafx.h" #include <windows.h> #include <windowsx.h> #include "resource.h" #include "MainDlg.h" #include "AboutDlg.h" BOOL WINAPI About_Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, About_Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, About_Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, About_Main_OnClose); } return FALSE; } BOOL About_Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { return TRUE; } void About_Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { case IDOK: { EndDialog(hwnd, 0); } break; default: break; } } void About_Main_OnClose(HWND hwnd) { EndDialog(hwnd, 0); }
再用上面的方法建立一个头文件文件名为AboutDlg,并在文件中添加下面的代码
#ifndef _About_MAIN_H #define _About_MAIN_H #include <windows.h> BOOL WINAPI About_Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL About_Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam); void About_Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify); void About_Main_OnClose(HWND hwnd); #endif
并且在MainDlg.CPP文件中
的void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)函数中添加下面代
//关于 case ID_MENUITEM40016: { /*得到窗口的实例句柄*/ HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); /*弹出对话框*/ DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_ABOUT), NULL,About_Main_Proc, NULL); } break;
修改关于对话框,将对话框修改成下图所示的界面
测试代码,执行程序
退出界面,退出界面和关于界面的原理一样,也是添加对话框新建两个文件一个是ExitDlg.CPP 还有一个是ExitDlg.h
在ExitDlg.cpp中添加下面代码
#include "stdafx.h" #include <windows.h> #include <windowsx.h> #include "shellapi.h"//取用托盘头文件 #include "resource.h" #include "MainDlg.h" #include "ExitDlg.h" //处理托盘消息 void ToTray(HWND hwnd,int flag) { //得到父窗口的句柄 HWND hwnd1 = FindWindow(NULL,TEXT("音乐播放器")); //传递托盘结构 NOTIFYICONDATA nid; //结构体清零 ZeroMemory(&nid, sizeof(NOTIFYICONDATA)); //托盘结构的大小 nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); //父窗口的句柄 nid.hWnd = hwnd1; //父窗口的ID nid.uID = IDD_MAIN; //起作用的成员: hIcon uCallbackMessage szTip nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; //在托盘中显示音乐播放器的名字 wsprintf(nid.szTip ,"%s",TEXT("音乐播放器")); //程序自定义的消息标示符 nid.uCallbackMessage = WM_SHOWTASK; /*增加、修改或删除图标句柄*/ nid.hIcon = LoadIcon( (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), MAKEINTRESOURCE(IDI_ICON1)); switch(flag) { //音乐播放器最小化托盘 case 1: { //关闭退出对话框 EndDialog(hwnd,0); //隐藏窗口 ShowWindow(hwnd1,SW_HIDE); } break; //还原音乐播放器 case 2: { //显示窗口 ShowWindow(hwnd1,SW_SHOW); } break; //退出音乐播放器 case 3: { Main_OnClose(hwnd1); } break; //在托盘上显示图标 case 4: { Shell_NotifyIcon(NIM_ADD,&nid); } break; //删除托盘图标 case 5: { Shell_NotifyIcon(NIM_DELETE,&nid); } break; default: break; } } //关闭音乐播放器 void Exit_Main_OnClose1(HWND hwnd) { //删除托盘图标 ToTray(hwnd,5); //关闭音乐播放器 exit(0); } BOOL WINAPI Exit_Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Exit_Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Exit_Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Exit_Main_OnClose); } return FALSE; } BOOL Exit_Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { return TRUE; } void Exit_Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { //最小化托盘 case IDYES: { ToTray(hwnd,1); } break; //关闭音乐播放器 case IDNO: { Exit_Main_OnClose1(hwnd); } break; default: break; } } void Exit_Main_OnClose(HWND hwnd) { EndDialog(hwnd, 0); }
在ExitDlg.h中添加下面的代码
#ifndef _Exit_MAIN_H #define _Exit_MAIN_H #include <windows.h> BOOL WINAPI Exit_Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL Exit_Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam); void Exit_Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify); void Exit_Main_OnClose(HWND hwnd); //处理托盘消息 void ToTray(HWND hwnd,int flag); #define WM_SHOWTASK (WM_USER + 100) /*自定义消息,用于托盘图标响应鼠标消息*/ //关闭音乐播放器 void Exit_Main_OnClose1(HWND hwnd); #endif
在MainDlg.CPP中的void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)函数中
//退出音乐播放器 case ID_MENUITEMEXIT: { Exit_Main_OnClose1(hwnd); } break;
程序运行效果