ref: 2ac355532dc6bd13696bb8b06be924ed1a097d23
parent: 03339bb0a5314887affd3e5b7ececaf3bfa134e4
author: menno <menno>
date: Mon Apr 28 15:04:36 EDT 2003
new QCD plugin
--- a/plugins/QCD/QCDFAAD.c
+++ b/plugins/QCD/QCDFAAD.c
@@ -16,7 +16,7 @@
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
-** $Id: QCDFAAD.c,v 1.1 2003/02/09 18:55:19 menno Exp $
+** $Id: QCDFAAD.c,v 1.2 2003/04/28 19:04:35 menno Exp $
** based on menno's in_faad.dll plugin for Winamp
**
** The tag function has been removed because QCD supports ID3v1 & ID3v2 very well
@@ -28,6 +28,7 @@
#include <windows.h>
#include <mmreg.h>
#include <commctrl.h>
+#include <shellapi.h>
#include <stdlib.h>
#include <stdio.h>
#include "QCDInputDLL.h"
@@ -47,7 +48,7 @@
faacDecFrameInfo frameInfo;
HINSTANCE hInstance;
-HWND hwndPlayer;
+HWND hwndPlayer, hwndConfig, hwndAbout;
QCDModInitIn sQCDCallbacks, *QCDCallbacks;
BOOL oldAPIs = 0;
static char lastfn[MAX_PATH]; // currently playing file (used for getting info on the current file)
@@ -74,9 +75,6 @@
int id3v2_tag(unsigned char *buffer);
DWORD WINAPI PlayThread(void *b); // the decode thread procedure
-BOOL CALLBACK config_dialog_proc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam);
-INT_PTR CALLBACK AboutProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);/* about dialogbox*/
-
// general funcz
static void show_error(const char *message,...)
{
@@ -130,7 +128,7 @@
char stream_buffer_size[10];
strcpy(variable_bitrate_display, "1");
- strcpy(priority, "4");
+ strcpy(priority, "5");
strcpy(memmap_file, "0");
strcpy(local_buffer_size, "128");
strcpy(stream_buffer_size, "64");
@@ -195,7 +193,7 @@
ModInit->toModule.Configure = Configure;
QCDCallbacks = ModInit;
- ModInfo->moduleString = "FAAD Plugin v1.0";
+ ModInfo->moduleString = "FAAD Plugin v1.0b";
/* read config */
QCDCallbacks->Service(opGetPluginSettingsFile, INI_FILE, MAX_PATH, 0);
@@ -234,13 +232,6 @@
//----------------------------------------------------------------------------
-void Configure(int flags)
-{
- HWND hwndConfig = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_CONFIG), hwndPlayer, config_dialog_proc);
- if(hwndConfig)
- ShowWindow(hwndConfig, SW_NORMAL);
-}
-
BOOL CALLBACK config_dialog_proc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
char tmp[10];
@@ -344,13 +335,91 @@
return FALSE;
}
+
+void Configure(int flags)
+{
+ if(!IsWindow(hwndConfig))
+ hwndConfig = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_CONFIG), hwndPlayer, config_dialog_proc);
+ ShowWindow(hwndConfig, SW_NORMAL);
+}
+
//-----------------------------------------------------------------------------
+// proc of "About Dialog"
+INT_PTR CALLBACK about_dialog_proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ static RECT rcLOGO, rcMail1, rcMail2/*, rcMail3*/;
+ POINT ptMouse;
+ static char szPluginVer[] = "QCD FAAD Input Plug-in v1.0b\nCompiled on " __TIME__ ", " __DATE__;
+ static char szFLACVer[] = "Using: FAAD2 v "FAAD2_VERSION" by";
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ case WM_MOVE:
+ GetWindowRect(GetDlgItem(hwndDlg, IDC_LOGO), &rcLOGO);
+ GetWindowRect(GetDlgItem(hwndDlg, IDC_MAIL1), &rcMail1);
+ GetWindowRect(GetDlgItem(hwndDlg, IDC_MAIL2), &rcMail2);
+// GetWindowRect(GetDlgItem(hwndDlg, IDC_MAIL2), &rcMail3);
+
+ SetDlgItemText(hwndDlg, IDC_PLUGINVER, szPluginVer);
+ SetDlgItemText(hwndDlg, IDC_FAADVER, szFLACVer);
+
+ return TRUE;
+ case WM_MOUSEMOVE:
+ ptMouse.x = LOWORD(lParam);
+ ptMouse.y = HIWORD(lParam);
+ ClientToScreen(hwndDlg, &ptMouse);
+ if( (ptMouse.x >= rcLOGO.left && ptMouse.x <= rcLOGO.right &&
+ ptMouse.y >= rcLOGO.top && ptMouse.y<= rcLOGO.bottom)
+ ||
+ (ptMouse.x >= rcMail1.left && ptMouse.x <= rcMail1.right &&
+ ptMouse.y >= rcMail1.top && ptMouse.y<= rcMail1.bottom)
+ ||
+ (ptMouse.x >= rcMail2.left && ptMouse.x <= rcMail2.right &&
+ ptMouse.y >= rcMail2.top && ptMouse.y<= rcMail2.bottom)
+/* ||
+ (ptMouse.x >= rcMail3.left && ptMouse.x <= rcMail3.right &&
+ ptMouse.y >= rcMail3.top && ptMouse.y<= rcMail3.bottom)*/ )
+ SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(32649)));
+ else
+ SetCursor(LoadCursor(NULL, IDC_ARROW));
+
+ return TRUE;
+ case WM_LBUTTONDOWN:
+ ptMouse.x = LOWORD(lParam);
+ ptMouse.y = HIWORD(lParam);
+ ClientToScreen(hwndDlg, &ptMouse);
+ if(ptMouse.x >= rcLOGO.left && ptMouse.x <= rcLOGO.right &&
+ ptMouse.y >= rcLOGO.top && ptMouse.y<= rcLOGO.bottom)
+ ShellExecute(0, NULL, "http://www.audiocoding.com", NULL,NULL, SW_NORMAL);
+ else if(ptMouse.x >= rcMail1.left && ptMouse.x <= rcMail1.right &&
+ ptMouse.y >= rcMail1.top && ptMouse.y<= rcMail1.bottom)
+ ShellExecute(0, NULL, "mailto:shaohao@elong.com", NULL,NULL, SW_NORMAL);
+ else if(ptMouse.x >= rcMail2.left && ptMouse.x <= rcMail2.right &&
+ ptMouse.y >= rcMail2.top && ptMouse.y<= rcMail2.bottom)
+ ShellExecute(0, NULL, "mailto:menno@audiocoding.com", NULL,NULL, SW_NORMAL);
+/* else if(ptMouse.x >= rcMail3.left && ptMouse.x <= rcMail3.right &&
+ ptMouse.y >= rcMail3.top && ptMouse.y<= rcMail3.bottom)
+ ShellExecute(0, NULL, "I don't know", NULL,NULL, SW_NORMAL);
+*/
+ return TRUE;
+ case WM_COMMAND:
+ switch(LOWORD(wParam))
+ {
+ case IDOK:
+ default:
+ DestroyWindow(hwndDlg);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
void About(int flags)
{
- HWND hwndAbout = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_ABOUT), hwndPlayer, AboutProc);
- if(hwndAbout)
- ShowWindow(hwndAbout, SW_NORMAL);
+ if(!IsWindow(hwndAbout))
+ hwndAbout = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_ABOUT), hwndPlayer, about_dialog_proc);
+ ShowWindow(hwndAbout, SW_SHOW);
}
//-----------------------------------------------------------------------------
@@ -368,7 +437,7 @@
QCDCallbacks->Service(opGetPluginSettingsFile, INI_FILE, MAX_PATH, 0);
config_read();
- ModInfo->moduleString = "FAAD Plugin v1.0";
+ ModInfo->moduleString = "FAAD Plugin v1.0b";
ModInfo->moduleExtensions = "AAC";
/* Initialize winsock, necessary for streaming */
@@ -375,7 +444,7 @@
WinsockInit();
// insert menu item into plugin menu
- QCDCallbacks->Service(opSetPluginMenuItem, hInstance, IDD_CONFIG, (long)"FAAD Plug-in");
+// QCDCallbacks->Service(opSetPluginMenuItem, hInstance, IDD_CONFIG, (long)"FAAD Plug-in");
return TRUE;
}
@@ -392,15 +461,8 @@
/* Deallocate winsock */
WinsockDeInit();
- if(seek_table)
- {
- free(seek_table);
- seek_table = NULL;
- seek_table_length = 0;
- }
-
// delete the inserted plugin menu
- QCDCallbacks->Service(opSetPluginMenuItem, hInstance, 0, 0);
+// QCDCallbacks->Service(opSetPluginMenuItem, hInstance, 0, 0);
}
//-----------------------------------------------------------------------------
@@ -613,10 +675,9 @@
get_AAC_format((char *)medianame, &file_info, &seek_table, &seek_table_length, 0);
- strcpy(lastfn,medianame);
- paused = 0;
- seek_needed = -1;
+ seek_needed = playfrom > 0 ? playfrom : -1;
killPlayThread = 0;
+ strcpy(lastfn,medianame);
/*
To RageAmp: This is really needed, because aacinfo isn't very accurate on ADIF files yet.
@@ -625,18 +686,6 @@
file_info.sampling_rate = samplerate;
file_info.channels = frameInfo.channels;
- // show constant bitrate at first
- {
- AudioInfo cai;
- cai.struct_size = sizeof(AudioInfo);
- cai.frequency = file_info.sampling_rate;
- cai.bitrate = file_info.bitrate;
- cai.mode = (channels == 2) ? 0 : 3;
- cai.layer = 0;
- cai.level = 0;
- QCDCallbacks->Service(opSetAudioInfo, &cai, sizeof(AudioInfo), 0);
- }
-
play_thread_handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) PlayThread, (void *) &killPlayThread, 0, &thread_id);
if(!play_thread_handle)
return FALSE;
@@ -673,27 +722,23 @@
sQCDCallbacks.toPlayer.OutputStop(flags);
killPlayThread = 1;
- if (WaitForSingleObject(play_thread_handle, INFINITE) == WAIT_TIMEOUT)
- TerminateThread(play_thread_handle,0);
- CloseHandle(play_thread_handle);
- play_thread_handle = INVALID_HANDLE_VALUE;
-
+ if(play_thread_handle != INVALID_HANDLE_VALUE)
+ {
+ if(WaitForSingleObject(play_thread_handle, INFINITE) == WAIT_TIMEOUT)
+ {
+// MessageBox(hwndPlayer, "FAAD thread kill timeout", "debug", 0);
+ TerminateThread(play_thread_handle,0);
+ }
+ CloseHandle(play_thread_handle);
+ play_thread_handle = INVALID_HANDLE_VALUE;
+ }
+
if (oldAPIs)
QCDCallbacks->toPlayer.PlayStopped(lastfn);
lastfn[0] = 0;
- faacDecClose(hDecoder);
- close_filestream(infile);
-
- if (memmap_buffer)
- LocalFree(memmap_buffer);
- if(seek_table)
- {
- free(seek_table);
- seek_table = NULL;
- seek_table_length = 0;
- }
}
+
return TRUE;
}
@@ -788,12 +833,12 @@
{
/********************** SEEK ************************/
if (!done && seek_needed >= 0)
- {
+ {
int seconds;
- QCDCallbacks->toPlayer.OutputFlush(0);
// Round off to a second
seconds = seek_needed - (seek_needed%1000);
+ QCDCallbacks->toPlayer.OutputFlush(decode_pos_ms);
aac_seek(seconds, seek_table);
decode_pos_ms = seconds;
decoded_frames = 0;
@@ -801,9 +846,8 @@
br_bytes_consumed = 0;
seek_needed = -1;
- done = FALSE;
updatePos = 1;
- }
+ }
/********************* QUIT *************************/
if (done)
@@ -810,6 +854,7 @@
{
if (QCDCallbacks->toPlayer.OutputDrain(0) && !(seek_needed >= 0))
{
+ play_thread_handle = INVALID_HANDLE_VALUE;
QCDCallbacks->toPlayer.OutputStop(STOPFLAG_PLAYDONE);
QCDCallbacks->toPlayer.PlayDone(lastfn);
}
@@ -824,17 +869,16 @@
/******************* DECODE TO BUFFER ****************/
else
{
- if(last_frame)
- {
- done=1;
- }
- else
- {
- if (current_file_mode)
- bytesconsumed = PlayThread_memmap();
- else
- bytesconsumed = PlayThread_file();
+ if (current_file_mode)
+ bytesconsumed = PlayThread_memmap();
+ else
+ bytesconsumed = PlayThread_file();
+ if(last_frame)
+ done = TRUE;
+ else
+ {
+
decoded_frames++;
br_calc_frames++;
br_bytes_consumed += bytesconsumed;
@@ -848,7 +892,7 @@
vai.bitrate = (int)((br_bytes_consumed * 8) / (decoded_frames / 43.07));
vai.mode = (channels == 2) ? 0 : 3;
vai.layer = 0;
- vai.level = 0;
+ vai.level = file_info.version;
QCDCallbacks->Service(opSetAudioInfo, &vai, sizeof(AudioInfo), 0);
br_calc_frames = 0;
@@ -866,28 +910,36 @@
{
WriteDataStruct wd;
- decode_pos_ms += (1024*1000)/file_info.sampling_rate;
-
l = frameInfo.samples * sizeof(short);
+ decode_pos_ms += (1024*1000)/file_info.sampling_rate;
+
wd.bytelen = l;
wd.data = sample_buffer;
wd.markerend = 0;
wd.markerstart = decode_pos_ms;
- wd.bps = 16/*file_info.bitrate / frameInfo.samplerate*/;
+ wd.bps = 16;
wd.nch = frameInfo.channels;
- wd.numsamples = frameInfo.samples/*wd.bytelen / (wd.bps / 8) / wd.nch*/;
+ wd.numsamples =l/file_info.channels/(16/8);
wd.srate = file_info.sampling_rate;
if (!QCDCallbacks->toPlayer.OutputWrite(&wd))
done = TRUE;
}
- }
- }
- }
+ }
+ }
+ }
Sleep(10);
}
-
+
+ // close up
+ play_thread_handle = INVALID_HANDLE_VALUE;
+
+ faacDecClose(hDecoder);
+ hDecoder = INVALID_HANDLE_VALUE;
+ close_filestream(infile);
+ infile = NULL;
+
if(seek_table)
{
free(seek_table);
@@ -894,7 +946,18 @@
seek_table = NULL;
seek_table_length = 0;
}
-
+
+ if(buffer)
+ {
+ LocalFree(buffer);
+ buffer = NULL;
+ }
+ if(memmap_buffer)
+ {
+ LocalFree(memmap_buffer);
+ memmap_buffer = NULL;
+ }
+
return 0;
}
@@ -905,7 +968,7 @@
memmap_buffer + memmap_index, fileread - memmap_index - 1);
if (frameInfo.error)
{
- show_error(faacDecGetErrorMessage(frameInfo.error));
+// show_error(faacDecGetErrorMessage(frameInfo.error));
last_frame = 1;
}
@@ -920,7 +983,8 @@
{
int k;
- if (buffercount > 0) {
+ if (buffercount > 0)
+ {
for (k = 0; k < (768*2 - buffercount); k++)
buffer[k] = buffer[k + buffercount];
@@ -931,7 +995,7 @@
sample_buffer = (char*)faacDecDecode(hDecoder, &frameInfo, buffer, 768*2);
if (frameInfo.error)
{
- show_error(faacDecGetErrorMessage(frameInfo.error));
+// show_error(faacDecGetErrorMessage(frameInfo.error));
last_frame = 1;
}
@@ -942,23 +1006,6 @@
last_frame = 1;
return frameInfo.bytesconsumed;
-}
-
-
-// proc of "About Dialog"
-INT_PTR CALLBACK AboutProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- switch (uMsg)
- {
- case WM_COMMAND:
- switch(LOWORD(wParam))
- {
- case IDOK:
- DestroyWindow(hwndDlg);
- return TRUE;
- }
- }
- return FALSE;
}
// tag
--- a/plugins/QCD/QCDFAAD.dsp
+++ b/plugins/QCD/QCDFAAD.dsp
@@ -69,7 +69,7 @@
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\include" /I "..\..\common\faad" /I "..\..\plugins\winamp" /I "..\..\common\id3lib\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ID3LIB_COMPILATION" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\include" /I "..\..\common\faad" /I "..\..\plugins\winamp" /I "..\..\common\id3lib\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ID3LIB_COMPILATION" /FR /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x413 /d "_DEBUG"
@@ -80,6 +80,7 @@
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# SUBTRACT LINK32 /force
!ENDIF
@@ -134,6 +135,14 @@
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\hand.cur
+# End Source File
+# Begin Source File
+
+SOURCE=.\logo.bmp
+# End Source File
# Begin Source File
SOURCE=.\plugin_dlg.rc
binary files /dev/null b/plugins/QCD/logo.bmp differ
--- a/plugins/QCD/plugin_dlg.rc
+++ b/plugins/QCD/plugin_dlg.rc
@@ -74,19 +74,21 @@
PUSHBUTTON "Reset",RESET_BTN,7,112,50,14
END
-IDD_ABOUT DIALOG DISCARDABLE 0, 0, 187, 114
+IDD_ABOUT DIALOG DISCARDABLE 0, 0, 191, 168
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About FAAD Plug-in"
FONT 8, "MS Sans Serif"
BEGIN
- DEFPUSHBUTTON "OK",IDOK,68,93,50,14
- CTEXT "FAAD Input Plug-in for QCD v 1.0\nLast Modified Feb. 2003",
- IDC_STATIC,13,7,161,19
- CTEXT "Using: FAAD2 v1.2 beta by M. Bakker && menno",
- IDC_STATIC,7,33,173,8
- LTEXT "FAAD: http://www.audiocoding.com",IDC_STATIC,7,50,129,8
- LTEXT "Author: Shao Hao\nE-Mail: shaohao@elong.com",IDC_STATIC,
- 9,67,140,20
+ DEFPUSHBUTTON "OK",IDOK,70,147,50,14
+ CTEXT "",IDC_PLUGINVER,29,73,133,16
+ CTEXT "",IDC_FAADVER,40,123,111,8
+ LTEXT "QCD Input Plug-in by",IDC_STATIC,62,97,67,8
+ CONTROL 107,IDC_LOGO,"Static",SS_BITMAP | SS_CENTERIMAGE |
+ SS_REALSIZEIMAGE,7,0,177,68
+ LTEXT "Shao Hao",IDC_MAIL1,79,111,33,8
+ LTEXT "M. Bakker",IDC_MAIL3,59,134,34,8
+ LTEXT "menno",IDC_MAIL2,109,134,22,8
+ LTEXT "&&",IDC_STATIC,97,134,8,8
END
@@ -109,13 +111,19 @@
IDD_ABOUT, DIALOG
BEGIN
LEFTMARGIN, 7
- RIGHTMARGIN, 180
- TOPMARGIN, 7
- BOTTOMMARGIN, 107
+ RIGHTMARGIN, 184
+ BOTTOMMARGIN, 161
END
END
#endif // APSTUDIO_INVOKED
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDB_LOGO BITMAP DISCARDABLE "logo.bmp"
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
--- a/plugins/QCD/resource.h
+++ b/plugins/QCD/resource.h
@@ -2,64 +2,32 @@
// Microsoft Developer Studio generated include file.
// Used by plugin_dlg.rc
//
-#define PLUGIN_DLG 101
#define IDD_CONFIG 101
-#define IDD_INFO 102
-#define IDD_EDITTEXTFRAME 103
-#define IDD_ADDFRAME 104
-#define IDD_ADDSTANDARD 105
#define IDD_ABOUT 106
+#define IDB_LOGO 107
#define VARBITRATE_CHK 1004
-#define BUFFERING_SLIDER 1006
#define THREAD_PRIORITY_SLIDER 1007
-#define IDC_ID3V2TAG 1020
-#define IDC_CLOSE 1021
-#define IDC_CANCEL 1022
-#define IDC_HEADER 1025
-#define IDC_PROFILE 1026
-#define IDC_BITRATE 1027
-#define IDC_SAMPLERATE 1028
-#define IDC_CHANNELS 1029
-#define IDC_VERSION 1030
-#define IDC_ID3LIST 1032
#define IDC_STATIC2 1034
#define LOCAL_BUFFER_TXT 1035
#define STREAM_BUFFER_TXT 1036
-#define IDC_CHECK1 1037
#define IDC_MEMMAP 1037
#define OK_BTN 1038
#define CANCEL_BTN 1039
-#define IDC_EDITTEXTFRAME 1040
-#define IDC_FRAMETYPE 1040
-#define IDC_TEXTFRAMENAME 1041
-#define IDC_COL0 1041
-#define IDC_DELFRAME 1042
-#define IDC_COL1 1042
-#define IDC_EDITFRAME 1043
-#define IDC_ADDFRAME 1044
-#define IDC_TRACK 1045
-#define IDC_ADDSTFRAMES 1045
-#define IDC_TITLE 1046
-#define IDC_FORMAT 1046
-#define IDC_ARTIST 1047
#define RESET_BTN 1047
-#define IDC_ALBUM 1048
-#define IDC_YEAR 1049
-#define IDC_COMMENT 1050
-#define IDC_COMPOSER 1051
-#define IDC_ORIGARTIST 1052
-#define IDC_COPYRIGHT 1053
-#define IDC_URL 1054
-#define IDC_ENCBY 1055
-#define IDC_GENRE 1056
+#define IDC_LOGO 1048
+#define IDC_PLUGINVER 1050
+#define IDC_FAADVER 1051
+#define IDC_MAIL1 1052
+#define IDC_MAIL2 1053
+#define IDC_MAIL3 1054
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 107
+#define _APS_NEXT_RESOURCE_VALUE 109
#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1048
+#define _APS_NEXT_CONTROL_VALUE 1055
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif