for (int i=0;i<dwWkCount;i++)
{
if (WkRec[i].indParent==selDisk)
LV_AddItem(HANDLES.hWndListView, 0, WkRec[i].cTrack,&WkRec[i]);
}
}
void InitTree()
{
TV_DeleteAll();
lstrcpy(FileName, "");
dwWkCount=1;
delete []WkRec;
WkRec=new WorkRecord[dwWkCount];
ZeroMemory(WkRec,sizeof(WorkRecord));
HANDLES.iSelDisk=-1;
HANDLES.iSelTrack=-1;
MakeTree();
}
/* ####################################### */
bool WndProc_OnCreate(HWND hWnd,LPCREATESTRUCT lpCreateStruct)
{
HANDLES.hWndMain=hWnd;
if (!SB_Create(hWnd))
return FALSE;
if (!TB_Create(hWnd))
return FALSE;
if (!LV_Create(hWnd))
return FALSE;
if (!TV_Create(hWnd))
return FALSE;
InitTree();
ResizeWindows(hWnd);
return TRUE;
return 1;
}
void WndProc_OnResize(HWND hWnd,int cx, int cy, int cz)
{
if (!ResizeWindows(hWnd))
MessageBox(NULL, "Window resizing failed!", NULL, MB_OK);
}
void WndProc_OnDestroy(HWND hWnd)
{
PostQuitMessage(0);
}
void Main_OnCommand( HWND hWnd, int iCmd, HWND hwndCtl, UINT uCode )
{
int wCommand = iCmd;
int iTypeEdit,iNumRec;
GetStateOfCommonControls();
switch(iCmd)
{
case IDM_FILE_NEW:
iTypeEdit=MessageBox(NULL,"Вы хотите сохранить изменения?",
"Предупреждение",MB_YESNO);
if (iTypeEdit==IDYES)
{
if (strlen(FileName)==0)
{
if (!GetFlNameDialog(HANDLES.hWndMain,1))
break;
else
{
if (!SaveItems(FileName))
MessageBox(NULL,"Ошибка сохранения файла.","Ошибка",MB_OK);
else
InitTree();
}
}
else
{
if (!SaveItems(FileName))
MessageBox(NULL,"Ошибка сохранения файла.","Ошибка",MB_OK);
else
InitTree();
}
}
else
{
InitTree();
}
break;
case IDM_FILE_OPEN:
if (GetFlNameDialog(HANDLES.hWndMain,0))
{
if (!LoadItems(FileName))
MessageBox(NULL,"Ошибка загрузки файла.","Ошибка",MB_OK);
else MakeTree();
}
else
MessageBox(NULL,"Файл не выбран.","Ошибка",MB_OK);
break;
case IDM_FILE_SAVEAS:
if (!GetFlNameDialog(HANDLES.hWndMain,1))
{
MessageBox(NULL,"Файл не выбран.","Ошибка",MB_OK);
}
else
if (!SaveItems(FileName))
MessageBox(NULL,"Ошибка сохранения файла.","Ошибка",MB_OK);
break;
case IDM_FILE_SAVE:
if (strlen(FileName)==0)
{
if (!GetFlNameDialog(HANDLES.hWndMain,1))
{
break;
//MessageBox(NULL,"Файл не выбран.","Ошибка",MB_OK);
}
else
if (!SaveItems(FileName))
MessageBox(NULL,"Ошибка сохранения файла.","Ошибка",MB_OK);
}
break;
case IDM_EDIT_ADD:
if (HANDLES.iSelDisk<0)
{
iNumRec=AddNewItem(0,0);
iTypeEdit=DialogBoxParam(ghInst,MAKEINTRESOURCE(IDD_DIALOG_ADD_DISK),
hWnd,(DLGPROC)addDiskDlgProc,
(LPARAM) iNumRec);
if (iTypeEdit)
DeleteRec(iNumRec);
}
else
{
iNumRec=AddNewItem(1,HANDLES.iSelDisk);
iTypeEdit=DialogBoxParam(ghInst,MAKEINTRESOURCE(IDD_DIALOG_ADD_TRACK),
hWnd,(DLGPROC)addTrackDlgProc,(LPARAM) iNumRec);
if (iTypeEdit)
DeleteRec(iNumRec);
}
MakeTree();
break;
case IDM_EDIT_CHANGE:
=0)">if (HANDLES.iSelTrack>=0)
{
DialogBoxParam(ghInst,MAKEINTRESOURCE(IDD_DIALOG_ADD_TRACK),
hWnd,(DLGPROC)addTrackDlgProc,(LPARAM) HANDLES.iSelTrack);
MakeTree();
break;
}
=0)">if (HANDLES.iSelDisk>=0)
{
DialogBoxParam(ghInst,MAKEINTRESOURCE(IDD_DIALOG_ADD_DISK),
hWnd,(DLGPROC)addDiskDlgProc,
(LPARAM) HANDLES.iSelDisk);
MakeTree();
}
break;
case IDM_EDIT_DELETE:
=0)">if (HANDLES.iSelTrack>=0)
{
DeleteRec(HANDLES.iSelTrack);
MakeTree();
break;
}
=0)">if (HANDLES.iSelDisk>=0)
{
DeleteRec(HANDLES.iSelDisk);
MakeTree();
}
break;
case IDM_PROPERTY:
=0)">if (HANDLES.iSelTrack>=0)
CreatePropertySheet(hWnd,1);
break;
case IDM_VIEW_BIG:
case IDM_VIEW_SMALL:
case IDM_VIEW_LIST:
case IDM_VIEW_TABLE:
LV_ChangeView(wCommand);
break;
case IDM_HELP_ABOUT:
DialogBox(ghInst,MAKEINTRESOURCE(IDD_DIALOG_HELP_ABOUT),hWnd,(DLGPROC)AboutDlgProc);
break;
case IDM_FILE_EXIT:
SendMessage(hWnd,WM_DESTROY,0,0);
break;
default:
break;
}
}
void WndProc_OnMenu(HWND hwnd, HWND hwndCtl, UINT xPos, UINT yPos)
{
HMENU hMenu,hMenuTrackPopup ;
if (hwndCtl == HANDLES.hWndListView)
{
// Get the context menu from the resource file.
hMenu = LoadMenu(HANDLES.hInst, MAKEINTRESOURCE(IDR_TRACKPOPUP));
// Get the first item in the menu for TrackPopupMenu().
hMenuTrackPopup = GetSubMenu(hMenu, 0);
// Draw and track the "floating" menu.
TrackPopupMenu(hMenuTrackPopup,
TPM_LEFTALIGN | TPM_RIGHTBUTTON,
xPos, yPos,
0, HANDLES.hWndMain, NULL);
// Destroy the menu
DestroyMenu(hMenu);
}
}
LRESULT WINAPI CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
switch(msg)
{
HANDLE_MSG(hWnd, WM_CONTEXTMENU, WndProc_OnMenu );
HANDLE_MSG(hWnd,WM_CREATE,WndProc_OnCreate);
HANDLE_MSG(hWnd,WM_DESTROY,WndProc_OnDestroy);
HANDLE_MSG(hWnd, WM_SIZE, WndProc_OnResize);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand );
case WM_NOTIFY:
if (TV_NotifyHandler(hWnd, msg, wParam, lParam))
{
break;
}
if (TT_NotifyHandler(hWnd, msg, wParam, lParam))
{
break;
}
if (LV_NotifyHandler(hWnd, msg, wParam, lParam))
{
break;
}
default:
return(DefWindowProc(hWnd,msg,wParam,lParam));
}
return 0;}
ATOM RegisterAppClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc=(WNDPROC)WndProc;
wcex.cbClsExtra=0;
wcex.cbWndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=LoadIcon(hInstance,(LPCTSTR)IDI_ICON_APP);
wcex.hIconSm=LoadIcon(hInstance,(LPCTSTR)IDI_ICON_APP);
wcex.hCursor=NULL;
wcex.hbrBackground=CreateSolidBrush(COLOR);
wcex.lpszMenuName=MAKEINTRESOURCE(IDM_MENU_MAIN);
wcex.lpszClassName=ClassName;
return RegisterClassEx(&wcex);
}
BOOL InitInstanceWindow(HINSTANCE hInstance,int nCmdShow)
{
HWND hWnd=CreateWindow(ClassName,AplicationTitle,
WS_OVERLAPPEDWINDOW | WS_MAXIMIZE,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,
hInstance,NULL);
if(!hWnd) return 0;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
return 1;
};
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)
{
HANDLES.hInst=hInstance;
InitCommonControls();
if(!RegisterAppClass(hInstance))
{
MessageBox(NULL,"Ошибка регистрации класса окна!!!",
Error_title,MB_OK|MB_ICONERROR);
return 0;
}
if(!InitInstanceWindow(hInstance,nCmdShow))
{
MessageBox(NULL,"Ошибка создания окна!!!",
Error_title,MB_OK|MB_ICONERROR);
return 0;
}
HWND hwndDlg=(HWND)0;
MSG msg;
while(GetMessage(&msg,NULL,0,0)){
if(!IsDialogMessage(PropHandle,&msg)){
TranslateMessage(&msg);
DispatchMessage(&msg);}}
return msg.wParam;
}