Files
Sun1602/Tools/ItemDropTestTool/ItemDropManagerDlg.cpp
T
2022-10-26 12:25:11 +08:00

727 lines
18 KiB
C++

// ItemDropManagerDlg.cpp : 구현 파일
//
#include "stdafx.h"
#include "ItemDropManager.h"
#include "ItemDropManagerDlg.h"
#include ".\itemdropmanagerdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define MAX_MONSTER_KILL_COUNT 1000000000
#define MIN_MONSTER_KILL_COUNT 1
#define MAX_PLAYER_LEVEL 100
#define MIN_PLAYER_LEVEL 1
#define MAX_MONSTER_LEVEL 100
#define MIN_MONSTER_LEVEL 1
#define MAX_MONSTER_GRADE 6
#define MIN_MONSTER_GRADE 0
enum ENUM_SCRIPT_TYPE
{
eSCRIPT_TYPE_HUNTING = 0,
eSCRIPT_TYPE_MISSION
};
// 응용 프로그램 정보에 사용되는 CAboutDlg 대화 상자입니다.
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 대화 상자 데이터
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원
// 구현
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CItemDropManagerDlg 대화 상자
CItemDropManagerDlg::CItemDropManagerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CItemDropManagerDlg::IDD, pParent)
, m_dwMonsterKillCount(0)
, m_nRadioViewOption(0)
, m_dwMonsterCode(0)
, m_nUpperMonsterLevel(0)
, m_nLowerMonsterLevel(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_nMonsterGrade = 0;
m_nNowColumnCount = 0;
m_nRadioInput = 0;
}
void CItemDropManagerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_KILL_COUNT, m_dwMonsterKillCount);
DDX_Control(pDX, IDC_COMBO_MONSTER_TYPE, m_comboMonsterGrade);
DDX_Control(pDX, IDC_LIST_ITEM, m_listDropItem);
DDX_Control(pDX, IDC_COMBO_SCRIPT_TYPE, m_comboScriptType);
DDX_Radio(pDX, IDC_RADIO_RESULT, m_nRadioViewOption);
DDX_Text(pDX, IDC_EDIT_MONSTER_CODE, m_dwMonsterCode);
DDX_Radio( pDX, IDC_RADIO_MONSTER_LEVEL, m_nRadioInput );
DDX_Text(pDX, IDC_EDIT_UPPER_LEVEL, m_nUpperMonsterLevel);
DDX_Text(pDX, IDC_EDIT_LOWER_LEVEL, m_nLowerMonsterLevel);
}
BEGIN_MESSAGE_MAP(CItemDropManagerDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON_START, OnBnClickedButtonStart)
ON_BN_CLICKED(IDC_BUTTON_SAVE, OnBnClickedButtonSave)
ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnBnClickedButtonClear)
ON_BN_CLICKED(IDC_RADIO_RESULT, OnBnClickedRadioResult)
ON_BN_CLICKED(IDC_RADIO_CONTENTS, OnBnClickedRadioContents)
ON_CBN_SELCHANGE(IDC_COMBO_MONSTER_TYPE, OnCbnSelchangeComboMonsterType)
ON_CBN_SELCHANGE(IDC_COMBO_SCRIPT_TYPE, OnCbnSelchangeComboScriptType)
ON_BN_CLICKED(IDC_BUTTON_SETTING, OnBnClickedButtonSetting)
ON_EN_CHANGE(IDC_EDIT_KILL_COUNT, OnEnChangeEditKillCount)
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
ON_WM_SIZE()
ON_BN_CLICKED(IDC_RADIO_MONSTER_LEVEL, OnBnClickedRadioMonsterLevel)
ON_BN_CLICKED(IDC_RADIO_MONSTER_CODE, OnBnClickedRadioMonsterCode)
ON_EN_CHANGE(IDC_EDIT_LOWER_LEVEL, OnEnChangeEditLowerLevel)
ON_EN_CHANGE(IDC_EDIT_UPPER_LEVEL, OnEnChangeEditUpperLevel)
END_MESSAGE_MAP()
// CItemDropManagerDlg 메시지 처리기
BOOL CItemDropManagerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
// IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
// 프레임워크가 이 작업을 자동으로 수행합니다.
SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다.
SetIcon(m_hIcon, FALSE); // 작은 아이콘을 설정합니다.
// TODO: 여기에 추가 초기화 작업을 추가합니다.
InitScriptTypeCombo(); // 스크립트 콤보박스 초기화
InitMonsterTypeCombo(); // 몬스터 종류 초기화
// 스크립트 초기화
m_DropManager.Initialize();
//List Control Grid 초기화...
DWORD styles = LVS_EX_GRIDLINES;
ListView_SetExtendedListViewStyleEx(m_listDropItem.GetSafeHwnd(), styles, styles);
GetDlgItem( IDC_BUTTON_START )->SetFocus();
OnBnClickedRadioMonsterLevel();
return TRUE; // 컨트롤에 대한 포커스를 설정하지 않을 경우 TRUE를 반환합니다.
}
void CItemDropManagerDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면
// 아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는
// 프레임워크에서 이 작업을 자동으로 수행합니다.
void CItemDropManagerDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다.
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 아이콘을 그립니다.
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// 사용자가 최소화된 창을 끄는 동안에 커서가 표시되도록 시스템에서
// 이 함수를 호출합니다.
HCURSOR CItemDropManagerDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CItemDropManagerDlg::OnBnClickedButtonStart()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData( TRUE );
//초기화
OnBnClickedButtonClear();
CString strMsg;
// 몬스터 격파 개수 체크( 1 - 200 사이)
if( m_dwMonsterKillCount < MIN_MONSTER_KILL_COUNT || m_dwMonsterKillCount > MAX_MONSTER_KILL_COUNT )
{
AfxMessageBox( "몬스터 격파 개체 수는 1 - 100000000 사이 이어야 합니다. " );
return;
}
// 스크립트 타입 체크(0 or 1)
if( m_nScriptType != eSCRIPT_TYPE_HUNTING && m_nScriptType != eSCRIPT_TYPE_MISSION )
{
AfxMessageBox( "스크립트 종류는 헌팅, 미션 둘중 하나이어야 합니다. " );
return;
}
if( m_nRadioInput == 0 )
{
// 몬스터 레벨 체크( 1 - 100 사이)
if( m_nUpperMonsterLevel < MIN_MONSTER_LEVEL || m_nUpperMonsterLevel > MAX_MONSTER_LEVEL )
{
AfxMessageBox( "몬스터 레벨은 1 - 100 사이 이어야 합니다. " );
return;
}
if( m_nLowerMonsterLevel < MIN_MONSTER_LEVEL || m_nLowerMonsterLevel > MAX_MONSTER_LEVEL )
{
AfxMessageBox( "몬스터 레벨은 1 - 100 사이 이어야 합니다. " );
return;
}
if( m_nLowerMonsterLevel > m_nUpperMonsterLevel )
{
AfxMessageBox( "최고 몬스터 레벨은 최저 몬스터 레벨보다 같거나 커야 합니다." );
return;
}
// 몬스터 등급
if( m_nMonsterGrade < MIN_MONSTER_GRADE || m_nMonsterGrade > MAX_MONSTER_GRADE )
{
AfxMessageBox( "몬스터 등급은 0 ~ 6 사이 이어야 합니다. " );
return;
}
}
else if( m_nRadioInput == 1 )
{
// 몬스터 CODE
if( m_dwMonsterCode <= 0 )
{
AfxMessageBox( "몬스터 코드가 있어야 합니다. " );
return;
}
}
// 스크립트 타입 적용
m_DropManager.SetScriptType( m_nScriptType );
m_DropManager.SetCntKillMonster( m_dwMonsterKillCount );
// 타입에 따른 데이타 계산..
BOOL bRet = FALSE;
if( m_nRadioInput == 0)
bRet = m_DropManager.DropItem( m_nLowerMonsterLevel, m_nUpperMonsterLevel, m_nMonsterGrade + 1, m_dwMonsterKillCount, m_nScriptType );
else
bRet = m_DropManager.DropItemEx( m_dwMonsterCode, m_dwMonsterKillCount, m_nScriptType );
if(bRet != FALSE)
DisplayItemList( m_nRadioViewOption );
}
void CItemDropManagerDlg::OnBnClickedButtonSave()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다
char szFilter[] = "All Files(*.*)|*.*|Text Files(*.txt)|*.txt|";
CFile txtFile;
CFileDialog dlgFile(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT, szFilter);
if(dlgFile.DoModal() == IDOK)
{
TRY
{
CString strPath = dlgFile.GetPathName();
strPath += ".txt";
if(txtFile.Open(strPath, CFile::modeCreate | CFile::modeWrite)) //새로운 파일이면..
{
CString strSave = m_DropManager.GetSaveDropInfo( m_nRadioViewOption );
if( strSave.GetLength() > 0)
txtFile.Write( strSave, strSave.GetLength()); //끝부터 파일에 씁니다.
txtFile.Close(); //파일을 닫습니다.
}
}
CATCH(CFileException, e)
{
CString strError;
int nError = 0;
e->GetErrorMessage((LPTSTR)strError.GetString(), nError, NULL);
AfxMessageBox(strError);
}
END_CATCH
}
}
void CItemDropManagerDlg::OnBnClickedButtonClear()
{
/************************************************************************/
/* 리스트 컨트롤 초기화 구문 */
/************************************************************************/
for(int i = 0; i < m_nNowColumnCount; i++)
m_listDropItem.DeleteColumn(0);
BOOL bRet = m_listDropItem.DeleteAllItems();
}
void CItemDropManagerDlg::OnBnClickedRadioResult()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
}
void CItemDropManagerDlg::OnBnClickedRadioContents()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
}
void CItemDropManagerDlg::OnCbnSelchangeComboMonsterType()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
m_nMonsterGrade = m_comboMonsterGrade.GetCurSel();
}
// 결과창에 표시를 한다.
void CItemDropManagerDlg::DisplayItemList(int nType)
{
InitListControl();
switch(nType) {
case 0: //결과만 표시
DisplayResult();
break;
case 1: //과정만 표시
DisplayProcess();
break;
}
}
//결과출력
void CItemDropManagerDlg::DisplayResult(void)
{
vector<CDropResult> vecInfo;
m_DropManager.CalcItemDropResult(); //결과를 계산한다.
DROPRESULT_MAP* pMapResult = m_DropManager.GetResultDropItems(); //결과값을 가져온다.
int nCol = 0, nItem = 0;
CString str;
LV_ITEM lvItem;
for( DROPRESULT_ITER iterResult = pMapResult->begin(); iterResult != pMapResult->end(); iterResult++ )
{
nCol = 0;
CDropResult info = iterResult->second;
CDropItem& item = info.GetItem();
lvItem.mask = LVIF_TEXT;
lvItem.iItem = nItem;
// 아이템 종류
lvItem.iSubItem = nCol++;
str = m_DropManager.GetItemType( item.GetDropType_() );
lvItem.pszText = (LPSTR)str.GetString();
m_listDropItem.InsertItem(&lvItem);
// 아이템 코드
lvItem.iSubItem = nCol++;
str.Format("%d", (WORD)item.GetCode() );
lvItem.pszText = (LPSTR)str.GetString();
m_listDropItem.SetItem(&lvItem);
// 이름 또는 돈
lvItem.iSubItem = nCol++;
if( item.GetDropType_() == DROP_TYPE_MONEY )
str.Format("%u", info.GetSumMoney() );
else
str.Format("%s", item.GetName().c_str() );
lvItem.pszText = (LPSTR)str.GetString();
m_listDropItem.SetItem(&lvItem);
// 드랍레벨
lvItem.iSubItem = nCol++;
str.Format("%d", (WORD)item.GetDropLevel() );
lvItem.pszText = (LPSTR)str.GetString();
m_listDropItem.SetItem(&lvItem);
//인첸트 급수
//lvItem.iSubItem = nCol++;
//str.Format("%d", item.GetEnchantLevel() );
//lvItem.pszText = (LPSTR)str.GetString();
//m_listDropItem.SetItem(&lvItem);
////랭크 급수
//lvItem.iSubItem = nCol++;
//str = m_DropManager.GetRank( (eRANK)item.GetRank() );
//lvItem.pszText = (LPSTR)str.GetString();
//m_listDropItem.SetItem(&lvItem);
////디바인 여부
//lvItem.iSubItem = nCol++;
//if( item.GetDivine() ) str = "Y";
//else str = "N";
//lvItem.pszText = (LPSTR)str.GetString();
//m_listDropItem.SetItem(&lvItem);
//개수
lvItem.iSubItem = nCol++;
str.Format("%d", info.GetItemCount() );
lvItem.pszText = (LPSTR)str.GetString();
m_listDropItem.SetItem(&lvItem);
//확률
lvItem.iSubItem = nCol++;
str.Format("%0.5f%%", info.GetDropRate() );
lvItem.pszText = (LPSTR)str.GetString();
m_listDropItem.SetItem(&lvItem);
nItem++;
}
}
//과정 출력
void CItemDropManagerDlg::DisplayProcess(void)
{
DROPITEM_MAP* pMapItem = m_DropManager.GetDropItems();
int nCol = 0, nItem = 0;
CString str;
LV_ITEM item;
for( DROPITEM_ITER iter = pMapItem->begin(); iter != pMapItem->end(); iter++ )
{
nCol = 0;
CDropItem info = iter->second;
item.mask = LVIF_TEXT;
item.iItem = nItem;
// 아이템 종류
item.iSubItem = nCol++;
str = m_DropManager.GetItemType( info.GetDropType_() );
item.pszText = (LPSTR)str.GetString();
m_listDropItem.InsertItem(&item);
// 아이템 코드
item.iSubItem = nCol++;
str.Format("%d", (WORD)info.GetCode() );
item.pszText = (LPSTR)str.GetString();
m_listDropItem.SetItem(&item);
// 이름
item.iSubItem = nCol++;
if( info.GetDropType_() == DROP_TYPE_MONEY )
str.Format("%d", info.GetMoney() );
else
str = info.GetName().c_str();
item.pszText = (LPSTR)str.GetString();
m_listDropItem.SetItem(&item);
// 드랍레벨
item.iSubItem = nCol++;
str.Format("%d", (WORD)info.GetDropLevel() );
item.pszText = (LPSTR)str.GetString();
m_listDropItem.SetItem(&item);
//인첸트 급수
item.iSubItem = nCol++;
str.Format("%d", info.GetEnchantLevel() );
item.pszText = (LPSTR)str.GetString();
m_listDropItem.SetItem(&item);
//랭크 급수
item.iSubItem = nCol++;
str = m_DropManager.GetRank( (eRANK)info.GetRank() );
item.pszText = (LPSTR)str.GetString();
m_listDropItem.SetItem(&item);
//디바인 여부
item.iSubItem = nCol++;
if( info.GetDivine() ) str = "Y";
else str = "N";
item.pszText = (LPSTR)str.GetString();
m_listDropItem.SetItem(&item);
nItem++;
}
}
void CItemDropManagerDlg::InitMonsterTypeCombo(void)
{
m_comboMonsterGrade.ResetContent();
vector<CString> vecTitle = m_DropManager.GetNameMonsterType();
int nSize = (int)vecTitle.size();
for(int i = 0; i < nSize; i++)
{
CString strTitle = vecTitle[i];
m_comboMonsterGrade.InsertString(i, strTitle);
}
m_comboMonsterGrade.SetCurSel(0);
m_nMonsterGrade = 0;
UpdateData(FALSE);
}
// 리스트 컨트롤 초기화
void CItemDropManagerDlg::InitListControl(void)
{
/************************************************************************/
/* 리스트 컨트롤 제목 설정 */
/************************************************************************/
vector<CString> vecTitle;
if( m_nRadioViewOption == 0) //결과
vecTitle = m_DropManager.GetResultTitle();
else if( m_nRadioViewOption == 1 ) //과정
vecTitle = m_DropManager.GetProcessTitle();
int nSize = (int)vecTitle.size();
for(int i = 0; i < nSize; i++)
{
CString strTitle = vecTitle[i];
LV_COLUMN lvcolumn;
lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
lvcolumn.fmt = LVCFMT_LEFT;
lvcolumn.pszText = (LPSTR)strTitle.GetString();
lvcolumn.iSubItem = 0;
if( i == 2 ) lvcolumn.cx = 150;
else lvcolumn.cx = 80;
if( i == 7 )
{
lvcolumn.cx = 50;
lvcolumn.cchTextMax = 50;
}
lvcolumn.cchTextMax = 70;
m_listDropItem.InsertColumn(i, &lvcolumn);
}
m_nNowColumnCount = i;
UpdateData(FALSE);
}
void CItemDropManagerDlg::InitScriptTypeCombo()
{
m_comboScriptType.ResetContent();
vector<CString> vecTitle = m_DropManager.GetNameScriptType();
int nSize = (int)vecTitle.size();
for(int i = 0; i < nSize; i++)
{
CString strTitle = vecTitle[i];
m_comboScriptType.InsertString(i, strTitle);
}
m_comboScriptType.SetCurSel(0);
m_nScriptType = eSCRIPT_TYPE_HUNTING;
UpdateData(FALSE);
}
void CItemDropManagerDlg::OnCbnSelchangeComboScriptType()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
m_nScriptType = m_comboScriptType.GetCurSel();
}
void CItemDropManagerDlg::OnBnClickedButtonSetting()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
//BROWSEINFO info;
//info.ulFlags = BIF_NEWDIALOGSTYLE;
//LPITEMIDLIST pItemIdList;
//pItemIdList = SHBrowseForFolder( &info );
//if( pItemIdList == NULL )
//{
// AfxMessageBox( "정보를 가지고 올수 없습니다." );
//}
}
void CItemDropManagerDlg::OnEnChangeEditKillCount()
{
// TODO: RICHEDIT 컨트롤인 경우 이 컨트롤은
// CDialog::마스크에 OR 연산하여 설정된 ENM_CHANGE 플래그를 지정하여
// CRichEditCtrl().SetEventMask()를 호출하도록 OnInitDialog() 함수를 재지정하지 않으면
// 이 알림을 보내지 않습니다.
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
// 몬스터 격파 개수 체크( 1 - 100000000 사이)
DWORD dwPreKillCount = m_dwMonsterKillCount;
UpdateData(TRUE);
if( m_dwMonsterKillCount < MIN_MONSTER_KILL_COUNT || m_dwMonsterKillCount > MAX_MONSTER_KILL_COUNT )
{
AfxMessageBox( "몬스터 격파 개체 수는 1 - 100000000 사이 이어야 합니다. " );
m_dwMonsterKillCount = dwPreKillCount;
UpdateData( FALSE );
return;
}
}
void CItemDropManagerDlg::OnBnClickedCancel()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
OnCancel();
}
void CItemDropManagerDlg::OnBnClickedOk()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
return;
OnOK();
}
void CItemDropManagerDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// CRect rect, rect2;
// m_listDropItem.GetClientRect( &rect );
}
void CItemDropManagerDlg::OnBnClickedRadioMonsterLevel()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData( TRUE );
GetDlgItem( IDC_EDIT_MONSTER_CODE )->EnableWindow( FALSE );
GetDlgItem( IDC_EDIT_UPPER_LEVEL )->EnableWindow( TRUE );
GetDlgItem( IDC_EDIT_LOWER_LEVEL )->EnableWindow( TRUE );
GetDlgItem( IDC_COMBO_MONSTER_TYPE )->EnableWindow( TRUE );
}
void CItemDropManagerDlg::OnBnClickedRadioMonsterCode()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData( TRUE );
GetDlgItem( IDC_EDIT_MONSTER_CODE )->EnableWindow( TRUE );
GetDlgItem( IDC_EDIT_UPPER_LEVEL )->EnableWindow( FALSE );
GetDlgItem( IDC_EDIT_LOWER_LEVEL )->EnableWindow( FALSE );
GetDlgItem( IDC_COMBO_MONSTER_TYPE )->EnableWindow( FALSE );
}
void CItemDropManagerDlg::OnEnChangeEditLowerLevel()
{
// TODO: RICHEDIT 컨트롤인 경우 이 컨트롤은
// CDialog::마스크에 OR 연산하여 설정된 ENM_CHANGE 플래그를 지정하여
// CRichEditCtrl().SetEventMask()를 호출하도록 OnInitDialog() 함수를 재지정하지 않으면
// 이 알림을 보내지 않습니다.
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
int nPreLevel = m_nLowerMonsterLevel;
UpdateData(TRUE);
// 몬스터 레벨 체크( 1 - 200 사이)
if( m_nLowerMonsterLevel < MIN_MONSTER_LEVEL || m_nLowerMonsterLevel > MAX_MONSTER_LEVEL )
{
AfxMessageBox( "몬스터 레벨은 1 - 100 사이 이어야 합니다. " );
m_nLowerMonsterLevel = nPreLevel;
UpdateData( FALSE );
return;
}
}
void CItemDropManagerDlg::OnEnChangeEditUpperLevel()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
int nPreLevel = m_nUpperMonsterLevel;
UpdateData(TRUE);
// 몬스터 레벨 체크( 1 - 200 사이)
if( m_nUpperMonsterLevel < MIN_MONSTER_LEVEL || m_nUpperMonsterLevel > MAX_MONSTER_LEVEL )
{
AfxMessageBox( "몬스터 레벨은 1 - 100 사이 이어야 합니다. " );
m_nUpperMonsterLevel = nPreLevel;
UpdateData( FALSE );
return;
}
}