DragonNest/Client/DnLauncher/DnResourceEditer/DnEditLauncherDlg.cpp
2024-12-19 09:48:26 +08:00

1027 lines
25 KiB
C++

// DnEditLauncherDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "DnResourceEditer.h"
#include "DnEditLauncherDlg.h"
#include "DnControlManager.h"
#include "DnTextModifyDlg.h"
#include "DnScaleDlg.h"
#include "DnDynamicCtrl.h"
#include "DnAboutDlg.h"
#include "DnSetRectDlg.h"
// DnEditLauncherDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(DnEditLauncherDlg, CDialog)
DnEditLauncherDlg::DnEditLauncherDlg(CWnd* pParent /*=NULL*/)
:CDialog(DnEditLauncherDlg::IDD, pParent) ,
m_bLBtnClickedFlag(false), m_pLBtnClickedControl(NULL)
{
}
DnEditLauncherDlg::~DnEditLauncherDlg()
{
}
void DnEditLauncherDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TREE_CONTROL, m_TreeSoft);
DDX_Control(pDX, IDC_BUTTON_QUIT, m_BtnQuit);
DDX_Control(pDX, IDC_BUTTON_GAMESTART, m_btnStartGame);
DDX_Control(pDX, IDC_CHECK_DIRECTSTART, m_cbDirectStart);
DDX_Control(pDX, IDC_BUTTON_OPTION, m_btnOption);
DDX_Control(pDX, IDC_BUTTON_WINCLOSE, m_btnWinClose);
DDX_Control(pDX, IDC_BUTTON_WINMINIMUM, m_btnWinMini);
DDX_Control(pDX, IDC_BUTTON_START_PATCH, m_btnStartPatch);
DDX_Control(pDX, IDC_BUTTON_SELECT_PARTITION, m_btnSelectPartition);
DDX_Control(pDX, IDC_STATIC_LAUNCHER_VER, m_stVersion);
DDX_Control(pDX, IDC_STATIC_FILECOUNT, m_stFileCnt);
DDX_Control(pDX, IDC_STATIC_FILENAME, m_stFileName);
DDX_Control(pDX, IDC_STATIC_TIMELEFT, m_stTimeLeft);
DDX_Control(pDX, IDC_STATIC_FILESIZE, m_stFileSize);
DDX_Control(pDX, IDC_STATIC_DOWNLOAD_PER, m_stDownPercent);
DDX_Control(pDX, IDC_STATIC_DOWNLOAD_STATE, m_stDownState);
DDX_Control(pDX, IDC_STATIC_DIRECTSTART_TEXT, m_stDirectStart);
DDX_Control(pDX, IDC_STATIC_SELECT_PARTITION, m_stSelectPartition);
DDX_Control(pDX, IDC_STATIC_SELECT_PARTITION_NAME, m_stPartitionName);
DDX_Control(pDX, IDC_STATIC_SELECT_PARTITION_GUIDE, m_stPartitionGuide);
DDX_Control(pDX, IDC_PROGRESS_FILECOUNT, m_prgFileCount);
DDX_Control(pDX, IDC_PROGRESS_DOWNLOAD, m_prgDownLoad);
//DDX_Control(pDX, IDC_STATIC_WEBPAGE, m_pcWebpage); // 삭제했음...
DDX_Control(pDX, IDC_BUTTON_PROGRESS_DOWNLOAD, m_btnProgressDownload);
DDX_Control(pDX, IDC_BUTTON_PROGRESS_COUNT, m_btnProgressCount);
DDX_Control(pDX, IDC_BUTTON_WEBPAGE, m_btnWebpage);
}
BEGIN_MESSAGE_MAP(DnEditLauncherDlg, CDialog)
ON_WM_ERASEBKGND()
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_CONTROL, &DnEditLauncherDlg::OnTvnSelchangedTree1)
ON_NOTIFY(NM_CLICK, IDC_TREE_CONTROL, &DnEditLauncherDlg::OnNMClickTree1)
ON_NOTIFY(NM_RCLICK, IDC_TREE_CONTROL, &DnEditLauncherDlg::OnNMRclickTreeControl)
ON_UPDATE_COMMAND_UI(IDC_BUTTON_QUIT, OnUpdateCmdUI)
ON_COMMAND(ID_LOAD_IMAGE, &DnEditLauncherDlg::OnLoadImage)
//ON_BN_CLICKED(IDC_BUTTON_SAVE, &DnEditLauncherDlg::OnBnClickedButtonSave)
//ON_BN_CLICKED(IDC_BUTTON_LOAD, &DnEditLauncherDlg::OnBnClickedButtonLoad)
ON_COMMAND(ID_MENU_TEXTMODIFY, &DnEditLauncherDlg::OnMenuTextmodify)
ON_WM_CTLCOLOR()
ON_COMMAND(ID_FILE_MAIN_SAVE, &DnEditLauncherDlg::OnFileMainSave)
ON_COMMAND(ID_FILE_MAIN_LOAD, &DnEditLauncherDlg::OnFileMainLoad)
ON_COMMAND(ID_FILE_MAIN_QUIT, &DnEditLauncherDlg::OnFileMainQuit)
ON_COMMAND(ID_ABOUT, &DnEditLauncherDlg::OnAbout)
ON_WM_DESTROY()
ON_COMMAND(ID_MENU_POS_DEFAULT, &DnEditLauncherDlg::OnMenuPosDefault)
ON_WM_KEYDOWN()
ON_WM_KEYUP()
ON_WM_RBUTTONDOWN()
ON_WM_RBUTTONUP()
ON_COMMAND(ID_MENU_SCALE, &DnEditLauncherDlg::OnMenuScale)
ON_WM_CONTEXTMENU()
ON_COMMAND(ID_MENU_RESOURCE_RESET, &DnEditLauncherDlg::OnMenuResourceReset)
ON_COMMAND(ID_CREATE_BTN, &DnEditLauncherDlg::OnCreateBtn)
//ON_COMMAND(ID_DYNAMIC_BTN, &DnEditLauncherDlg::OnFileMainQuit)
ON_COMMAND(ID_CREATE_STATICTEXT, &DnEditLauncherDlg::OnCreateStatictext)
ON_COMMAND(ID_CREATE_PROGRESS, &DnEditLauncherDlg::OnCreateProgress)
ON_COMMAND(ID_CREATE_CHECKBOX, &DnEditLauncherDlg::OnCreateCheckbox)
ON_COMMAND(ID_MENU_CTRLMODIFY, &DnEditLauncherDlg::OnMenuCtrlmodify)
ON_COMMAND(ID_FILE_NEWFILE, &DnEditLauncherDlg::OnFileNewfile)
ON_COMMAND(ID_MENU_DELETE, &DnEditLauncherDlg::OnMenuDelete)
ON_COMMAND(ID_MENU_SETRECT, &DnEditLauncherDlg::OnMenuSetrect)
ON_COMMAND(ID_CONTROL_LOCK, &DnEditLauncherDlg::OnControlLock)
ON_COMMAND(ID_CONTROL_UNLOCK, &DnEditLauncherDlg::OnControlUnlock)
END_MESSAGE_MAP()
// DnEditLauncherDlg 메시지 처리기입니다.
BOOL DnEditLauncherDlg::OnInitDialog()
{
_CrtDumpMemoryLeaks();
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
CDialog::OnInitDialog();
// 단축키 설정.
m_hAccel = LoadAccelerators( AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
// 폰트 설정.
m_Font.CreateFont( 11, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, 0, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, _T("돋움") );
// 다이얼로그 배경 이미지 변경.
if( !InitBackGround() )
{
this->EndDialog(0);
return false;
}
// 트리 컨트롤 초기화
if( !InitTreeControl() )
{
this->EndDialog(0);
return false;
}
return TRUE;
}
int DnEditLauncherDlg::InitTreeControl()
{
// 상위 버튼 생성.
DNCTRLMANAGER.m_hRootItem = m_TreeSoft.InsertItem(_T("컨트롤 목록"), TVI_ROOT, TVI_LAST);
DNCTRLMANAGER.m_hBtnItem = m_TreeSoft.InsertItem(_T("BUTTONS"), DNCTRLMANAGER.m_hRootItem, TVI_LAST);
DNCTRLMANAGER.m_hTextItem = m_TreeSoft.InsertItem(_T("STATIC_TEXT"), DNCTRLMANAGER.m_hRootItem, TVI_LAST);
DNCTRLMANAGER.m_hProgressItem = m_TreeSoft.InsertItem(_T("PROGRESSBAR"), DNCTRLMANAGER.m_hRootItem, TVI_LAST);
DNCTRLMANAGER.m_hCheckBoxItem = m_TreeSoft.InsertItem(_T("CHECK_BOX"), DNCTRLMANAGER.m_hRootItem, TVI_LAST);
// 펼친다.
m_TreeSoft.Expand(DNCTRLMANAGER.m_hRootItem, TVE_EXPAND);
m_TreeSoft.Expand(DNCTRLMANAGER.m_hBtnItem, TVE_EXPAND);
m_TreeSoft.Expand(DNCTRLMANAGER.m_hTextItem, TVE_EXPAND);
m_TreeSoft.Expand(DNCTRLMANAGER.m_hProgressItem,TVE_EXPAND);
m_TreeSoft.Expand(DNCTRLMANAGER.m_hCheckBoxItem,TVE_EXPAND);
// 위치 설정.
RECT treeRT;
m_TreeSoft.GetWindowRect(&treeRT);
m_TreeSoft.SetWindowPos(NULL, m_dwWidth+10, (m_dwHeight-m_dwHeight)+10, treeRT.right-treeRT.left , treeRT.bottom-treeRT.top, SWP_NOZORDER );
// 트리 컨트롤의 주소 저장.
DNCTRLMANAGER.SetTreeListPointer(&m_TreeSoft);
return true;
}
int DnEditLauncherDlg::InitBackGround()
{
// make bitmap
CString szFilePath;
HBITMAP hBmp = DNCTRLMANAGER.MakeBitmap(szFilePath);
if( hBmp == NULL )
{
return false;
}
// set window size
BITMAP bmp = { 0 };
GetObject( hBmp, sizeof(BITMAP), &bmp );
m_dwWidth = bmp.bmWidth; // bitmap width
m_dwHeight = bmp.bmHeight; // bitmap height
// build memory dc for background
CDC* dc = GetDC();
m_dcBkGrnd = CreateCompatibleDC( dc->m_hDC );
ReleaseDC( dc );
// select background image
SelectObject( m_dcBkGrnd, hBmp );
// set window size the same as image size
SetWindowPos( this, 0, 0, m_dwWidth + _WINDOW_OFFSET , m_dwHeight + 50, SWP_NOZORDER | SWP_NOMOVE);
return true;
}
BOOL DnEditLauncherDlg::OnEraseBkgnd(CDC* pDC)
{
RECT rt;
GetClientRect(&rt);
pDC->FillSolidRect(&rt, RGB(204,204,255));
BitBlt( pDC->m_hDC, 0, 0, m_dwWidth, m_dwHeight, m_dcBkGrnd, 0 , 0 ,SRCCOPY );
return TRUE;
}
void DnEditLauncherDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
}
void DnEditLauncherDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// 마우스 왼쪽 클릭
SetCapture();
POINT pt;
GetCursorPos(&pt);
// 현재 선택된 컨트롤
int nEnum = -1;
m_pLBtnClickedControl = DNCTRLMANAGER.CheckCollision(pt, nEnum);
if( m_pLBtnClickedControl != NULL )
{
if(DNCTRLMANAGER.IsLockObject(nEnum))
{
return;
}
m_bLBtnClickedFlag = true;
m_LBtnClickedPos = point;
}
CDialog::OnLButtonDown(nFlags, point);
}
void DnEditLauncherDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// 마우스 이동
if( m_bLBtnClickedFlag )
{
POINT MousePt;
RECT rect;
GetClientRect(&rect);
GetCursorPos(&MousePt);
ScreenToClient(&MousePt);
if( MousePt.x < 0 || MousePt.y < 0 || MousePt.x > rect.right || MousePt.y > rect.bottom )
{
// 윈도우 영역 밖;
return;
}
RECT rtLocal, rtWorld;
m_pLBtnClickedControl->GetClientRect(&rtLocal); // 로컬 좌표
m_pLBtnClickedControl->GetWindowRect(&rtWorld); // 월드 좌표
int nhalf_X = rtLocal.right / 2;
int nhalf_Y = rtLocal.bottom / 2;
m_pLBtnClickedControl->SetWindowPos(NULL, point.x - nhalf_X, point.y - nhalf_Y, 0,0,SWP_NOSIZE | SWP_NOZORDER);
RECT rt;
m_pLBtnClickedControl->GetClientRect(&rt);
m_pLBtnClickedControl->InvalidateRect(&rt);
}
CDialog::OnMouseMove(nFlags, point);
}
void DnEditLauncherDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// 마우스 왼쪽 클릭 업
if( GetCapture() == this && m_bLBtnClickedFlag && m_pLBtnClickedControl )
{
ReleaseCapture();
m_bLBtnClickedFlag = false;
POINT pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
RECT rtLocal, rtWorld;
m_pLBtnClickedControl->GetClientRect(&rtLocal); // 로컬 좌표
m_pLBtnClickedControl->GetWindowRect(&rtWorld); // 월드 좌표
int nhalf_X = rtLocal.right / 2;
int nhalf_Y = rtLocal.bottom / 2;
m_pLBtnClickedControl->SetWindowPos(NULL, point.x - nhalf_X, point.y - nhalf_Y, 0,0,SWP_NOSIZE | SWP_NOZORDER);
m_pLBtnClickedControl = NULL;
Invalidate();
}
CDialog::OnLButtonUp(nFlags, point);
}
void DnEditLauncherDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
// [마우스 우 클릭 다운]
CDialog::OnRButtonDown(nFlags, point);
}
void DnEditLauncherDlg::OnRButtonUp(UINT nFlags, CPoint point)
{
// [마우스 우 클릭 업]
CDialog::OnRButtonUp(nFlags, point);
}
void DnEditLauncherDlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
*pResult = 0;
}
void DnEditLauncherDlg::CheckChildItems( HTREEITEM hItem )
{
HTREEITEM hChildItem = m_TreeSoft.GetChildItem(hItem);
if(hChildItem)
{
while(hChildItem != NULL)
{
m_TreeSoft.SetCheck(hChildItem, true);
//CWnd* pCtrl = DNCTRLMANAGER.GetCtrl( m_TreeSoft.GetItemText(hChildItem) );
/* if(pCtrl)
{
pCtrl->ShowWindow( !(pCtrl->IsWindowVisible()) );
DNCTRLMANAGER.SetCheckBox(m_TreeSoft.GetItemText(hChildItem), 1);
}
if(m_TreeSoft.ItemHasChildren(hChildItem))
{
CheckChildItems(hChildItem);
}*/
hChildItem = m_TreeSoft.GetNextItem(hChildItem, TVGN_NEXT);
}
}
else
{
CWnd* pCtrl = DNCTRLMANAGER.GetCtrl( m_TreeSoft.GetItemText(hItem) );
if(pCtrl)
{
pCtrl->ShowWindow( !(pCtrl->IsWindowVisible()) );
DNCTRLMANAGER.SetCheckBox(m_TreeSoft.GetItemText(hItem), 1);
}
}
}
void DnEditLauncherDlg::UnCheckChildItems( HTREEITEM hItem )
{
HTREEITEM hChildItem = m_TreeSoft.GetChildItem(hItem);
if(hChildItem)
{
while(hChildItem != NULL)
{
m_TreeSoft.SetCheck(hChildItem, false);
// CWnd* pCtrl = DNCTRLMANAGER.GetCtrl( m_TreeSoft.GetItemText(hChildItem) );
//if(pCtrl)
//{
// pCtrl->ShowWindow( !(pCtrl->IsWindowVisible()) );
// DNCTRLMANAGER.SetCheckBox(m_TreeSoft.GetItemText(hChildItem), 0);
//}
//if(m_TreeSoft.ItemHasChildren(hChildItem))
//{
// UnCheckChildItems(hChildItem);
//}
hChildItem = m_TreeSoft.GetNextItem(hChildItem, TVGN_NEXT);
}
}
else
{
CWnd* pCtrl = DNCTRLMANAGER.GetCtrl( m_TreeSoft.GetItemText(hItem) );
if(pCtrl)
{
pCtrl->ShowWindow( !(pCtrl->IsWindowVisible()) );
DNCTRLMANAGER.SetCheckBox(m_TreeSoft.GetItemText(hItem), 0);
}
}
}
void DnEditLauncherDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
// 트리 리스트에서 마우스 왼클릭.
DWORD pos = ::GetMessagePos();
CPoint point( LOWORD( pos ), HIWORD( pos ) );
m_TreeSoft.ScreenToClient( &point );
UINT nFlags = 0;
HTREEITEM hItem = m_TreeSoft.HitTest( point, &nFlags );
CString str = m_TreeSoft.GetItemText(hItem);
m_szRButtonItem = str;
if(hItem)
{
// 체크박스를 클릭한 경우!
if( nFlags & TVHT_ONITEMSTATEICON )
{
if( m_TreeSoft.GetCheck(hItem) )
{
UnCheckChildItems(hItem); // 기능이 필요없어서 막았음.
}
else
{
CheckChildItems(hItem); // 기능이 필요없어서 막았음.
}
}
}
*pResult = 0;
}
void DnEditLauncherDlg::OnNMRclickTreeControl(NMHDR *pNMHDR, LRESULT *pResult)
{
// 트리 리스트에서 마우스 우클릭. [팝업 생성]
CPoint pt;
UINT nFlags = 0;
GetCursorPos(&pt);
m_TreeSoft.ScreenToClient( &pt );
HTREEITEM hItem = m_TreeSoft.HitTest( pt, &nFlags );
CString str = m_TreeSoft.GetItemText(hItem);
m_szRButtonItem = str;
m_pRBtnClickedControl = DNCTRLMANAGER.GetCtrl(str);
m_hTreeItem = hItem;
if( str.GetLength() > 0 )
{
CPoint p;
GetCursorPos(&p);
CMenu menu;
menu.LoadMenu(IDR_MENU_MODIFY);
CMenu* Dmenu = menu.GetSubMenu(0); // 맨앞을 가져옴
SetPossibleMenu(Dmenu, m_szRButtonItem); // 사용하지 않는 메뉴 비활성화.
Dmenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, p.x, p.y, this);
}
*pResult = 0;
}
void DnEditLauncherDlg::SetPossibleMenu( CMenu* pMenu, CString currentItemName )
{
_CTRL_IT it;
if( DNCTRLMANAGER.GetVecIterator(currentItemName, it) == false )
{
return;
}
if( (*it).m_WndPT == NULL )
{
return;
}
switch((*it).m_nType)
{
case _BUTTON:
break;
case _TEXT:
pMenu->EnableMenuItem(ID_LOAD_IMAGE, MF_DISABLED);
break;
case _PROGRESS_BAR:
pMenu->EnableMenuItem(ID_LOAD_IMAGE, MF_DISABLED);
break;
case _CHECK_BOX:
pMenu->EnableMenuItem(ID_LOAD_IMAGE, MF_DISABLED);
break;
}
}
void DnEditLauncherDlg::OnBnClickedButtonSave()
{
// 메뉴 -> 저장하기
if( DNCTRLMANAGER.Save() == E_FAIL )
{
CString strErr;
strErr.Format(CString("xml저장 오류"));
AfxMessageBox(strErr);
return;
}
}
void DnEditLauncherDlg::OnBnClickedButtonLoad()
{
// 메뉴 -> 불러오기
if( DNCTRLMANAGER.Load() == E_FAIL )
{
CString strErr;
strErr.Format(CString("xml로드 오류"));
AfxMessageBox(strErr);
return;
}
}
void DnEditLauncherDlg::OnLoadImage()
{
// 메뉴 -> 이미지 불러오기
CWnd* pCurrentSelectedItem = DNCTRLMANAGER.GetCtrl(m_szRButtonItem);
if( pCurrentSelectedItem )
{
CString szFilePath;
HBITMAP hBmp = DNCTRLMANAGER.MakeBitmap(szFilePath);
if( hBmp == NULL )
{
return ;
}
if( !DNCTRLMANAGER.SetResourceFilePath(m_szRButtonItem, szFilePath) )
{
CString szMSG;
szMSG.Format(_T("파일경로 설정에 실패했습니다."));
AfxMessageBox(szMSG);
}
BITMAP bmp = { 0 };
GetObject( hBmp, sizeof(BITMAP), &bmp );
CButton* pBtn = static_cast<CButton*> (pCurrentSelectedItem);
pBtn->SetBitmap(hBmp);
pBtn->SetWindowPos(NULL, 0,0,bmp.bmWidth,bmp.bmHeight,SWP_NOMOVE);
}
}
void DnEditLauncherDlg::OnMenuPosDefault()
{
// 메뉴 -> 컨트롤 위치 초기화
// 이상한데로 들어갔을때 빼기 위해서..
CWnd* pCurrentSelectedItem = DNCTRLMANAGER.GetCtrl(m_szRButtonItem);
if( pCurrentSelectedItem )
{
pCurrentSelectedItem->SetWindowPos(NULL, 0,0,0,0, SWP_NOSIZE);
Invalidate();
}
}
void DnEditLauncherDlg::OnMenuTextmodify()
{
// 메뉴 -> 텍스트 수정 클릭.
CDnTextModifyDlg* pEditDialog = new CDnTextModifyDlg();
if(pEditDialog)
{
if( pEditDialog->DoModal() == IDOK )
{
CString str;
CWnd* pCurrentSelectedItem = DNCTRLMANAGER.GetCtrl(m_szRButtonItem);
if(pCurrentSelectedItem)
{
pCurrentSelectedItem->SetWindowText(DNCTRLMANAGER.GetEditString());
DNCTRLMANAGER.SetStaticText(m_szRButtonItem, DNCTRLMANAGER.GetEditString());
m_TreeSoft.SetItemText(m_hTreeItem, DNCTRLMANAGER.GetEditString());
Invalidate();
}
}
}
SAFE_DELETE(pEditDialog);
}
void DnEditLauncherDlg::OnMenuScale()
{
// 메뉴 -> 스케일
if( m_pRBtnClickedControl )
{
DNCTRLMANAGER.SetCurrentControl(m_pRBtnClickedControl);
}
CDnScaleDlg dlg;
dlg.DoModal();
}
void DnEditLauncherDlg::OnMenuResourceReset()
{
// 메뉴 ---> 이미지 초기화 클릭
if( m_pRBtnClickedControl )
{
CButton* pBtn = static_cast<CButton*> (m_pRBtnClickedControl);
pBtn->SetBitmap(NULL);
pBtn->Invalidate();
DNCTRLMANAGER.ReleaseResourceFilePath(m_szRButtonItem);
}
}
HBRUSH DnEditLauncherDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
CRect rect;
UINT nID = pWnd->GetDlgCtrlID();
if(nCtlColor == CTLCOLOR_STATIC)
{
// 폰트 색 변경
pDC->SetTextColor(RGB(0,0,0));
CFont *OldFont = (CFont*)pDC->SelectObject(&m_Font);
// 배경 투명하게
//pDC->SetBkMode(TRANSPARENT);
//return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
return hbr;
}
void DnEditLauncherDlg::OnFileMainSave()
{
// 파일 -> 저장
HRESULT result = DNCTRLMANAGER.Save();
if( result == S_OK )
{
CString strMsg;
strMsg.Format(CString("XML파일 저장 완료!!"));
AfxMessageBox(strMsg);
}
else if( result == E_FAIL )
{
CString strMsg;
strMsg.Format(CString("XML파일 저장 실패.."));
AfxMessageBox(strMsg);
}
}
void DnEditLauncherDlg::OnFileMainLoad()
{
// 파일 -> 불러오기
if( DNCTRLMANAGER.Load() == S_OK )
{
DNCTRLMANAGER.CreateControlData(this);
}
else
{
CString strErr;
strErr.Format(CString("xml로드 오류"));
AfxMessageBox(strErr);
}
}
void DnEditLauncherDlg::OnFileMainQuit()
{
// 파일 -> 나가기
CString strMessage;
strMessage.Format(L"툴을 종료 하시겠습니까?\n[[ 주의: 자동 저장 되지 않습니다!! 파일 저장은 하셨습니까?? ]]");
if( AfxMessageBox(strMessage, MB_OKCANCEL) == IDOK )
{
this->EndDialog(0);
}
}
void DnEditLauncherDlg::OnAbout()
{
// 파일 -> 정보
CDnAboutDlg dlg;
dlg.DoModal();
}
BOOL DnEditLauncherDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
/*
if( wParam == (IDC_BUTTON_OPTION) )
{
GetDlgItem(IDC_BUTTON_OPTION)->EnableWindow(true);
}
*/
return CDialog::OnCommand(wParam, lParam);
}
void DnEditLauncherDlg::OnUpdateCmdUI(CCmdUI* pCmdUI)
{
pCmdUI->Enable(TRUE);
}
void DnEditLauncherDlg::OnDestroy()
{
CDialog::OnDestroy();
DNCTRLMANAGER.ResetControlData();
m_Font.DeleteObject();
DeleteDC(m_dcBkGrnd);
}
void DnEditLauncherDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
void DnEditLauncherDlg::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CDialog::OnKeyUp(nChar, nRepCnt, nFlags);
}
void DnEditLauncherDlg::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
{
//m_RBtnPopupMenu.LoadMenu(IDR_MENU_MODIFY);
//m_RBtnPopupMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
}
void DnEditLauncherDlg::OnCreateBtn()
{
// 메뉴 --> 버튼 만들기
CDnDynamicCtrl dlg(_BUTTON);
if( dlg.DoModal() == IDOK )
{
stNewControlData tempData = DNCTRLMANAGER.m_DynamicControlData;
SetRect(&tempData.m_RectPos, 0,0,200,40);
CButton *pButton = new CButton;
pButton->Create((tempData.m_szName), WS_VISIBLE | WS_CHILD | LBS_NOTIFY | BS_BITMAP , tempData.m_RectPos, this, 0);
pButton->EnableWindow(false);
pButton->ShowWindow(SW_SHOW);
tempData.m_WndPT = pButton;
tempData.m_nType = _BUTTON;
// 리소스 벡터에 저장.
DNCTRLMANAGER.m_vecCtrlData.push_back(tempData);
// 트리 컨트롤에 인서트.
HTREEITEM hItem = DNCTRLMANAGER.GetParentItem(tempData.m_nType);
HTREEITEM CurrentItem = m_TreeSoft.InsertItem(tempData.m_szName, hItem, TVI_LAST);
if(m_TreeSoft)
{
m_TreeSoft.SetCheck(CurrentItem, true);
}
m_TreeSoft.Expand(DNCTRLMANAGER.m_hBtnItem, TVE_EXPAND);
m_TreeSoft.SortChildren(DNCTRLMANAGER.m_hBtnItem);
m_TreeSoft.Invalidate(true);
}
}
void DnEditLauncherDlg::OnCreateStatictext()
{
// 메뉴 --> 텍스트 만들기
CDnDynamicCtrl dlg(_TEXT);
if( dlg.DoModal() == IDOK )
{
stNewControlData tempData = DNCTRLMANAGER.m_DynamicControlData;
SetRect(&tempData.m_RectPos, 0,0,100,11);
CStatic* pStatic = new CStatic;
pStatic->Create((tempData.m_szName), WS_VISIBLE | SS_LEFTNOWORDWRAP, tempData.m_RectPos, this, 1);
pStatic->ShowWindow(SW_SHOW);
tempData.m_WndPT = pStatic;
tempData.m_nType = _TEXT;
// 리소스 벡터에 저장.
DNCTRLMANAGER.m_vecCtrlData.push_back(tempData);
// 트리 컨트롤에 인서트.
//CString szBuff;
//szBuff.Format(L"리소스 ID:%s , 이름:%s", tempData.szID, tempData.szName);
HTREEITEM hItem = DNCTRLMANAGER.GetParentItem(tempData.m_nType);
HTREEITEM CurrentItem = m_TreeSoft.InsertItem(tempData.m_szName, hItem, TVI_LAST);
if(m_TreeSoft)
{
m_TreeSoft.SetCheck(CurrentItem, true);
}
m_TreeSoft.Expand(DNCTRLMANAGER.m_hTextItem, TVE_EXPAND);
m_TreeSoft.SortChildren(DNCTRLMANAGER.m_hTextItem);
m_TreeSoft.Invalidate(true);
}
}
void DnEditLauncherDlg::OnCreateProgress()
{
// 메뉴 --> 프로그래시브바 만들기
CDnDynamicCtrl dlg(_PROGRESS_BAR);
if( dlg.DoModal() == IDOK )
{
stNewControlData tempData = DNCTRLMANAGER.m_DynamicControlData;
SetRect(&tempData.m_RectPos, 0,0,400,9);
CButton *pButton = new CButton;
pButton->Create((tempData.m_szName), WS_VISIBLE | WS_CHILD | LBS_NOTIFY | BS_BITMAP , tempData.m_RectPos, this, 0);
pButton->EnableWindow(false);
pButton->ShowWindow(SW_SHOW);
tempData.m_nType = _PROGRESS_BAR;
tempData.m_WndPT = pButton;
// 리소스 벡터에 저장.
DNCTRLMANAGER.m_vecCtrlData.push_back(tempData);
// 트리 컨트롤에 인서트.
HTREEITEM hItem = DNCTRLMANAGER.GetParentItem(tempData.m_nType);
HTREEITEM CurrentItem = m_TreeSoft.InsertItem(tempData.m_szName, hItem , TVI_LAST);
if(m_TreeSoft)
{
m_TreeSoft.SetCheck(CurrentItem, true);
}
m_TreeSoft.Expand(DNCTRLMANAGER.m_hProgressItem, TVE_EXPAND);
m_TreeSoft.SortChildren(DNCTRLMANAGER.m_hProgressItem);
m_TreeSoft.Invalidate(true);
}
}
void DnEditLauncherDlg::OnCreateCheckbox()
{
// 메뉴 --> 체크빅스 만들기
CDnDynamicCtrl dlg(_CHECK_BOX);
if( dlg.DoModal() == IDOK )
{
stNewControlData tempData = DNCTRLMANAGER.m_DynamicControlData;
SetRect(&tempData.m_RectPos, 0,0,13,13);
CButton *pCheckBox = new CButton;
pCheckBox->Create(_T(""), WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_LEFTTEXT , tempData.m_RectPos, this, 4857);
pCheckBox->EnableWindow(false);
pCheckBox->ShowWindow(SW_SHOW);
tempData.m_nType = _CHECK_BOX;
tempData.m_WndPT = pCheckBox;
// 리소스 벡터에 저장.
DNCTRLMANAGER.m_vecCtrlData.push_back(tempData);
// 트리 컨트롤에 인서트.
HTREEITEM hItem = DNCTRLMANAGER.GetParentItem(tempData.m_nType);
HTREEITEM CurrentItem = m_TreeSoft.InsertItem(tempData.m_szName, hItem, TVI_LAST);
if(m_TreeSoft)
{
m_TreeSoft.SetCheck(CurrentItem, true);
}
m_TreeSoft.Expand(DNCTRLMANAGER.m_hCheckBoxItem, TVE_EXPAND);
m_TreeSoft.SortChildren(DNCTRLMANAGER.m_hCheckBoxItem);
m_TreeSoft.Invalidate(true);
}
}
void DnEditLauncherDlg::OnMenuCtrlmodify()
{
// 메뉴 --> 컨트롤 속성 보기
CWnd* pCtrl = DNCTRLMANAGER.GetCtrl(m_szRButtonItem);
if(pCtrl == NULL)
{
return;
}
_CTRL_IT it;
if( DNCTRLMANAGER.GetVecIterator(m_szRButtonItem, it) == false )
{
return;
}
if( !(*it).m_szName.IsEmpty() )
{
CString szEnum;
szEnum.Format(_T("%d"), (*it).m_nEnumValue);
CDnDynamicCtrl dlg(szEnum, (*it).m_szName);
if( dlg.DoModal() == IDOK )
{
// 1. 리스트 컨트롤의 목록을 바꿔준다.
m_TreeSoft.SetItemText(m_hTreeItem, DNCTRLMANAGER.m_DynamicControlData.m_szName);
// 2. 컨트롤 매니저의 벡터에 값을 바꿔준다.
(*it).m_szName = DNCTRLMANAGER.m_DynamicControlData.m_szName;
(*it).m_nEnumValue = DNCTRLMANAGER.m_DynamicControlData.m_nEnumValue;
// 3. 컨트롤 텍스트도 변경.
pCtrl->SetWindowText((*it).m_szName);
}
}
}
void DnEditLauncherDlg::OnFileNewfile()
{
// 메뉴 ---> 새로 만들기
CString strMessage;
strMessage.Format(L"파일을 새로 만드시겠습니까?");
if( AfxMessageBox(strMessage, MB_OKCANCEL) == IDOK )
{
DNCTRLMANAGER.ResetControlData();
}
}
void DnEditLauncherDlg::OnMenuDelete()
{
// 메뉴 ---> 삭제
CString strMessage;
strMessage.Format(L"삭제하시겠습니까?");
if( AfxMessageBox(strMessage, MB_OKCANCEL) == IDOK )
{
if( !DNCTRLMANAGER.DeleteCtrl(m_szRButtonItem, m_hTreeItem) )
{
strMessage.Format( L"삭제에 실패했습니다." );
AfxMessageBox( strMessage );
}
}
}
BOOL DnEditLauncherDlg::PreTranslateMessage(MSG* pMsg)
{
if( pMsg->message == WM_KEYDOWN )
{
bool bControl = ((GetKeyState(VK_CONTROL) & 0x8000) != 0);
if( bControl )
{
if(pMsg->wParam == 's' ||pMsg->wParam == 'S')
{
// 파일 세이브
OnFileMainSave();
return false;
}
else if(pMsg->wParam == 'l' ||pMsg->wParam == 'L')
{
// 파일 불러오기
OnFileMainLoad();
return false;
}
}
}
if(WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST)
{
if(m_hAccel && ::TranslateAccelerator(m_hWnd, m_hAccel, pMsg))
{
return true;
}
}
if( pMsg->wParam == VK_RETURN )
{
return false;
}
if( pMsg->wParam == VK_ESCAPE )
{
//OnFileMainQuit();
return false;
}
return CDialog::PreTranslateMessage(pMsg);
}
void DnEditLauncherDlg::OnMenuSetrect()
{
// 메뉴 --> SetRect
CDnSetRectDlg dlg;
if( dlg.DoModal() == IDOK )
{
CWnd* pWindow = DNCTRLMANAGER.GetCtrl(m_szRButtonItem);
if(pWindow)
{
pWindow->MoveWindow(&DNCTRLMANAGER.m_RectData, true);
pWindow->Invalidate(true);
}
}
}
void DnEditLauncherDlg::OnControlLock()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
int nControlEnum = DNCTRLMANAGER.GetEnum(m_szRButtonItem);
if(nControlEnum != -1)
DNCTRLMANAGER.SetLockObject(nControlEnum);
}
void DnEditLauncherDlg::OnControlUnlock()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
int nControlEnum = DNCTRLMANAGER.GetEnum(m_szRButtonItem);
if(nControlEnum != -1)
DNCTRLMANAGER.SetUnLockObject(nControlEnum);
}