Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабы / 2 / lab.01.by mice / fexchange / fx_gui
.cpp/*******************************************************************************
* file: fx_gui.cpp *
* version: 0.0.1 *
* author: inba (mailto:inba@mail.ru) *
* description: not available *
*******************************************************************************/
////////////////////////////////////////////////////////////////////////////////
// program specific headers
#include "fx_gui.h"
#include "resource.h"
namespace fx_ns {
/*******************************************************************************
* definitions *
*******************************************************************************/
////////////////////////////////////////////////////////////////////////////////
// CfxListCtr (private definitions)
BEGIN_MESSAGE_MAP(CfxListCtr, CListCtrl)
// ON_
END_MESSAGE_MAP()
////////////////////////////////////////////////////////////////////////////////
// cfx_dialog (public definitions)
cfx_dialog::cfx_dialog(): CDialog(IDD_MAIN_DLG) {
_sbtns_state = -1;
// find servers columns indexes
_scp_host = _get_scol_pos(COLUMN_HOST);
_scp_addr = _get_scol_pos(COLUMN_ADDRES);
_scp_port = _get_scol_pos(COLUMN_PORT);
_scp_state = _get_scol_pos(COLUMN_STATE);
// find clients columns indexes
_ccp_done = _get_ccol_pos(COLUMN_DONE);
_ccp_host = _get_ccol_pos(COLUMN_HOST);
_ccp_addr = _get_ccol_pos(COLUMN_ADDRES);
_ccp_port = _get_ccol_pos(COLUMN_PORT);
_ccp_state = _get_ccol_pos(COLUMN_STATE);
_ccp_fname = _get_ccol_pos(COLUMN_FNAME);
_ccp_fsize = _get_ccol_pos(COLUMN_FSIZE);
_ccp_time = _get_ccol_pos(COLUMN_TIME);
}
cfx_dialog::~cfx_dialog() {
// dummy
}
////////////////////////////////////////////////////////////////////////////////
// cfx_dialog (protected definitions)
const cfx_dialog::sfx_column cfx_dialog::_s_columns[] = {
{COLUMN_HOST, 100},
{COLUMN_ADDRES, 85},
{COLUMN_PORT, 45},
{COLUMN_STATE, 100}
};
const cfx_dialog::sfx_column cfx_dialog::_c_columns[] = {
{COLUMN_DONE, 40},
{COLUMN_HOST, 75},
{COLUMN_ADDRES, 75},
{COLUMN_PORT, 45},
{COLUMN_STATE, 100},
{COLUMN_FNAME, 100},
{COLUMN_FSIZE, 75},
{COLUMN_TIME, 60},
};
int cfx_dialog::_scol_num() const {
return sizeof(_s_columns)/sizeof(_s_columns[0]);
}
int cfx_dialog::_ccol_num() const {
return sizeof(_c_columns)/sizeof(_c_columns[0]);
}
int cfx_dialog::_get_scol_pos(const unsigned int id) const {
for (int i = _scol_num() - 1; 0 <= i; --i) {
if (id == _s_columns[i].n_id) return i;
}
return -1;
}
int cfx_dialog::_get_ccol_pos(const unsigned int id) const {
for (int i = _ccol_num() - 1; 0 <= i; --i) {
if (id == _c_columns[i].n_id) return i;
}
return -1;
}
BEGIN_MESSAGE_MAP(cfx_dialog, CDialog)
ON_COMMAND(IDC_NEW_SERV, _on_btn_new_serv)
ON_COMMAND(IDC_BROWSE, _on_btn_browse)
ON_COMMAND(IDC_SEND_FILE, _on_btn_send_file)
ON_COMMAND(IDC_STOP_SERV, _on_btn_stop_serv)
ON_COMMAND(IDC_KILL_SERV, _on_btn_kill_serv)
ON_COMMAND(IDC_PAUSE, _on_btn_pause)
ON_COMMAND(IDC_KILL, _on_btn_kill)
ON_COMMAND(IDC_EXIT, _on_btn_exit)
ON_NOTIFY(NM_CLICK, IDC_LIST_SERV, _on_serv_click)
ON_NOTIFY(LVN_KEYDOWN, IDC_LIST_SERV, _on_serv_click)
ON_NOTIFY(LVN_ITEMACTIVATE, IDC_LIST_SERV, _on_serv_click)
ON_NOTIFY(NM_CLICK, IDC_LIST_CON, _on_con_click)
ON_NOTIFY(LVN_KEYDOWN, IDC_LIST_CON, _on_con_click)
ON_NOTIFY(LVN_ITEMACTIVATE, IDC_LIST_CON, _on_con_click)
ON_WM_TIMER()
END_MESSAGE_MAP()
void cfx_dialog::OnTimer(UINT nIDEvent) {
sfx_time_hlp *thelper = sfx_data(nIDEvent);
CTimeSpan tmp = CTime::GetCurrentTime() - *thelper->st_time;
CString str = tmp.Format("%H:%M:%S");
list_con->SetItemText(thelper->item->if_data, ccp_time(), str);
}
void cfx_dialog::_on_btn_new_serv() {
int port = _get_port();
if (ERC_ERROR == port) return;
CString saddr;
edit_addr->GetWindowText(saddr);
cfx_if::sfx_crserv_info info;
info.port = (int)port;
info.address = saddr.GetBuffer();
_iface->cmd_to_core(cfx_if::CCMD_CRSERV, &info, NULL);
}
void cfx_dialog::_on_btn_browse() {
CString filter;
filter.LoadString(RS_DLG_FILTER);
CString fname;
edit_file->GetWindowText(fname);
CFileDialog fdlg(TRUE, NULL, fname,
OFN_DONTADDTORECENT|OFN_ENABLESIZING|OFN_EXPLORER|OFN_NOCHANGEDIR|/*OFN_FILEMUSTEXIST|
OFN_PATHMUSTEXIST|*/OFN_HIDEREADONLY, filter, this);
if (IDOK == fdlg.DoModal()) {
edit_file->SetWindowText(fdlg.GetPathName());
}
}
void cfx_dialog::_on_btn_send_file() {
int port = _get_port();
if (ERC_ERROR == port) return;
CString saddr, sfile;
edit_addr->GetWindowText(saddr);
edit_file->GetWindowText(sfile);
cfx_if::sfx_sndfile_info info;
info.address = saddr.GetBuffer();
info.file_name = sfile.GetBuffer();
info.port = (unsigned short)port;
_iface->cmd_to_core(cfx_if::CCMD_SENDFILE, &info, 0);
}
void cfx_dialog::_on_btn_stop_serv() {
int i = list_serv->GetSelectionMark();
if (0 > i) return;
cfx_if::sfx_serv_item *item = (cfx_if::sfx_serv_item *)list_serv->GetItemData(i);
if (cfx_if::ST_SERV_LISTENING == _sbtns_state) {
_iface->cmd_to_core(cfx_if::CCMD_STOPSERV, item, NULL);
} else if (cfx_if::ST_SERV_STOPED == _sbtns_state) {
_iface->cmd_to_core(cfx_if::CCMD_RUNSERV, item, NULL);
}
}
void cfx_dialog::_on_btn_kill_serv() {
int i = list_serv->GetSelectionMark();
if (0 > i) return;
cfx_if::sfx_serv_item *item = (cfx_if::sfx_serv_item *)list_serv->GetItemData(i);
_iface->cmd_to_core(cfx_if::CCMD_KILLSERV, item, NULL);
}
void cfx_dialog::_on_btn_pause() {
}
void cfx_dialog::_on_btn_kill() {
}
void cfx_dialog::_on_serv_click(NMHDR *phdr, LRESULT *pinfo) {
_serv_sel_item(list_serv->GetSelectionMark());
}
void cfx_dialog::_on_con_click(NMHDR *phdr, LRESULT *pinfo) {
_con_sel_item(list_con->GetSelectionMark());
}
void cfx_dialog::_on_btn_exit() {
//if (OK_OK == _core->exit()) {
// close dialog
EndDialog(OK_OK);
//}
}
BOOL cfx_dialog::OnInitDialog() {
edit_addr = (CEdit *)GetDlgItem(IDC_EDIT_ADDR);
char hostname[0xFF];
if (0 == gethostname(hostname, 0xFF)) {
edit_addr->SetWindowText(hostname);
} else {
edit_addr->SetWindowText("127.0.0.1");
}
edit_port = (CEdit *)GetDlgItem(IDC_EDIT_PORT);
edit_port->SetWindowText("57005");
edit_file = (CEdit *)GetDlgItem(IDC_EDIT_FILE);
btn_stop_serv = (CButton *)GetDlgItem(IDC_STOP_SERV);
btn_kill_serv = (CButton *)GetDlgItem(IDC_KILL_SERV);
btn_pause = (CButton *)GetDlgItem(IDC_PAUSE);
btn_kill = (CButton *)GetDlgItem(IDC_KILL);
list_serv = (CListCtrl *)GetDlgItem(IDC_LIST_SERV);
list_con = (CListCtrl *)GetDlgItem(IDC_LIST_CON);
SetWindowLong(list_serv->m_hWnd, GWL_STYLE, _list_style);
list_serv->SetExtendedStyle(LVS_EX_FULLROWSELECT);
SetWindowLong(list_con->m_hWnd, GWL_STYLE, _list_style);
list_con->SetExtendedStyle(LVS_EX_FULLROWSELECT);
CString str;
// insert servers columns
for (int i = 0; i < _scol_num(); ++i) {
str.LoadString(_s_columns[i].n_id);
list_serv->InsertColumn(i, str, LVCFMT_LEFT, _s_columns[i].width, i);
}
// insert clients columns
for (int i = 0; i < _ccol_num(); ++i) {
str.LoadString(_c_columns[i].n_id);
list_con->InsertColumn(i, str, LVCFMT_LEFT, _c_columns[i].width, i);
}
set_sbtns_state(cfx_if::ST_SERV_NONE);
return TRUE;
}
int cfx_dialog::_get_port() {
CString sport;
edit_port->GetWindowText(sport);
for (int x = (int)strlen(sport) - 1; 0 <= x; --x) {
if ('0' > sport[x] || '9' < sport[x]) {
//TODO: load from resources
MessageBox("Incorrect port value", "fexchange: input error", MB_APPLMODAL|MB_OK|MB_ICONERROR);
return ERC_ERROR;
}
}
return atoi(sport);
}
void cfx_dialog::_serv_sel_item(const int id) {
if (0 > id) return;
cfx_if::sfx_serv_item *info = (cfx_if::sfx_serv_item *)list_serv->GetItemData(id);
set_sbtns_state(info->state);
}
void cfx_dialog::set_sbtns_state(const int state) {
if (_sbtns_state == state) return;
_sbtns_state = state;
CString str;
if (cfx_if::ST_SERV_LISTENING == state) {
btn_stop_serv->EnableWindow(TRUE);
str.LoadString(STR_BTN_STOP);
} else if (cfx_if::ST_SERV_STOPED == state) {
btn_stop_serv->EnableWindow(TRUE);
str.LoadString(STR_BTN_RUN);
} else {
btn_stop_serv->EnableWindow(FALSE);
str.LoadString(STR_BTN_NA);
}
btn_stop_serv->SetWindowText(str);
switch (state) {
case cfx_if::ST_SERV_STOPED:
case cfx_if::ST_SERV_STOPING:
case cfx_if::ST_SERV_LISTENING:
btn_kill_serv->EnableWindow(TRUE);
str.LoadString(STR_BTN_KILL);
break;
default:
btn_kill_serv->EnableWindow(FALSE);
str.LoadString(STR_BTN_NA);
break;
}
btn_kill_serv->SetWindowText(str);
}
void cfx_dialog::_con_sel_item(const int id) {
}
////////////////////////////////////////////////////////////////////////////////
// cfx_gui (public definition)
cfx_gui::cfx_gui(): cfx_if() {
_dlg = new cfx_dialog;
_dlg->set_iface(this);
_serv_count = 0;
_clnt_count = 0;
_kill_mutex = CreateMutex(NULL, FALSE, NULL);
}
cfx_gui::~cfx_gui() {
ReleaseMutex(_kill_mutex);
delete _dlg;
}
int cfx_gui::run() {
_dlg->DoModal();
return OK_OK;
}
sfx_data cfx_gui::exec_cmd(const int cmd, const sfx_data ldata, const sfx_data rdata) {
CString str;
switch (cmd) {
case cfx_if::CMD_ERROR_REPORT:
return _on_error_report(ldata, rdata);
case cfx_if::CMD_US_NEW:
return _on_us_new(ldata, rdata);
case cfx_if::CMD_US_MODIFY:
return _on_us_modify(ldata, rdata);
case cfx_if::CMD_US_KILL:
return _on_us_kill(ldata, rdata);
case cfx_if::CMD_UC_NEW:
return _on_uc_new(ldata, rdata);
case cfx_if::CMD_UC_MODIFY:
return _on_uc_modify(ldata, rdata);
case cfx_if::CMD_UC_KILL:
return _on_uc_kill(ldata, rdata);
case cfx_if::CMD_ASK_ACCEPTIC:
return _on_ask_acceptic(ldata, rdata);
case cfx_if::CMD_ASK_FILENAME:
return _on_ask_filename(ldata, rdata);
default:
//str.FormatMessage(MSG_UNKNOWNCMD, cmd);
//MessageBox(str, MB_OK|MB_APPLMODAL|MB_ICONERROR, NULL);
return ERC_NOTHANDLED;
}
return ERC_ERROR; // dummy return;)
}
int cfx_gui::error_report(const char *const msg, int int_id, int win_id) {
MessageBox(_dlg->m_hWnd, msg, "fexchange: error", MB_OK|MB_APPLMODAL|MB_ICONERROR);
return OK_OK;
}
////////////////////////////////////////////////////////////////////////////////
// cfx_gui (protected definitions)
BOOL cfx_gui::_load_string(CString &str, const UINT id) {
if (TRUE == str.LoadString(id)) return TRUE;
str.Format("code: %u", id);
return FALSE;
}
sfx_data cfx_gui::_on_error_report(const sfx_data ldata, const sfx_data rdata) {
CString er_msg;
_load_string(er_msg, (0 <= ldata.i)? ldata.i: -ldata.i );
char *win_msg;
if (0 != rdata.i) {
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|
FORMAT_MESSAGE_ALLOCATE_BUFFER|
FORMAT_MESSAGE_ARGUMENT_ARRAY,
NULL, rdata.i, 0, (LPSTR)&win_msg, 0, NULL);
CString tmp;
tmp.FormatMessage(RS_MSG_WINERRORA, win_msg, rdata.i);
er_msg.Append(tmp);
LocalFree(win_msg);
}
error_report(er_msg, ldata, rdata);
return OK_OK;
}
sfx_data cfx_gui::_on_us_new(const sfx_data ldata, const sfx_data rdata) {
cfx_if::sfx_serv_item *item = ldata;
CString str;
_dlg->list_serv->InsertItem(_serv_count, NULL);
_dlg->list_serv->SetItemText(_serv_count, _dlg->scp_host(), item->addr.host);
_dlg->list_serv->SetItemText(_serv_count, _dlg->scp_addr(), item->addr.addres);
str.Format("%d", item->addr.port);
_dlg->list_serv->SetItemText(_serv_count, _dlg->scp_port(), str);
str.LoadString(item->state);
_dlg->list_serv->SetItemText(_serv_count, _dlg->scp_state(), str);
item->if_data = _serv_count;
_dlg->list_serv->SetItemData(_serv_count, (DWORD_PTR)item);
++_serv_count;
if (_dlg->list_serv->GetSelectionMark() == item->if_data.i) {
_dlg->set_sbtns_state(item->state);
#ifdef REDRAW_LIST
_dlg->btn_stop_serv->RedrawWindow();
_dlg->btn_kill_serv->RedrawWindow();
#endif
}
#ifdef REDRAW_LIST
_dlg->list_serv->RedrawWindow();
#endif
#ifdef USE_SLOW_MODE
Sleep(SLOW_MODE_DELAY);
#endif
return OK_OK;
}
sfx_data cfx_gui::_on_us_modify(const sfx_data ldata, const sfx_data rdata) {
cfx_if::sfx_serv_item *item = ldata;
CString str;
if (0 != (rdata.i & cfx_if::CMD_USMF_STATE)) {
_load_string(str, item->state);
_dlg->list_serv->SetItemText(item->if_data, _dlg->scp_state(), str);
if (_dlg->list_serv->GetSelectionMark() == item->if_data.i) {
_dlg->set_sbtns_state(item->state);
#ifdef REDRAW_LIST
_dlg->btn_stop_serv->RedrawWindow();
_dlg->btn_kill_serv->RedrawWindow();
#endif
}
}
if (0 != (rdata.i & cfx_if::CMD_USMF_ADDR)) {
_dlg->list_serv->SetItemText(item->if_data, _dlg->scp_host(), item->addr.host);
_dlg->list_serv->SetItemText(item->if_data, _dlg->scp_addr(), item->addr.addres);
str.Format("%d", item->addr.port);
_dlg->list_serv->SetItemText(item->if_data, _dlg->scp_port(), str);
}
#ifdef REDRAW_LIST
_dlg->list_serv->RedrawWindow();
#endif
#ifdef USE_SLOW_MODE
Sleep(SLOW_MODE_DELAY);
#endif
return OK_OK;
}
sfx_data cfx_gui::_on_us_kill(const sfx_data ldata, const sfx_data rdata) {
WaitForSingleObject(_kill_mutex, INFINITE);
cfx_if::sfx_serv_item *item = ldata;
// fix other indexes
for (int i = _dlg->list_serv->GetItemCount()-1; item->if_data.i < i; --i) {
cfx_if::sfx_serv_item *si;
si = (cfx_if::sfx_serv_item *)_dlg->list_serv->GetItemData(i);
--(si->if_data.i);
}
// delete it
_dlg->list_serv->DeleteItem(item->if_data);
--_serv_count;
int x = _dlg->list_serv->GetSelectionMark();
if (0 <= x) {
item = (cfx_if::sfx_serv_item *)_dlg->list_serv->GetItemData(x);
_dlg->set_sbtns_state(item->state);
#ifdef REDRAW_LIST
_dlg->btn_stop_serv->RedrawWindow();
_dlg->btn_kill_serv->RedrawWindow();
#endif
}
#ifdef REDRAW_LIST
_dlg->list_serv->RedrawWindow();
#endif
#ifdef USE_SLOW_MODE
Sleep(SLOW_MODE_DELAY);
#endif
ReleaseMutex(_kill_mutex);
return OK_OK;
}
sfx_data cfx_gui::_on_uc_new(const sfx_data ldata, const sfx_data rdata) {
cfx_if::sfx_clnt_item *item = ldata;
CString str;
// insert new item
_dlg->list_con->InsertItem(_clnt_count, NULL);
// fill done percent
double dval;
if (0 < item->total_sz && 0 < item->done_sz)
dval = double(1) / double(item->done_sz / item->total_sz);
else
dval = 0;
str.Format("%.1f", dval);
_dlg->list_con->SetItemText(_clnt_count, _dlg->ccp_done(), str);
// fill host and address
_dlg->list_con->SetItemText(_clnt_count, _dlg->ccp_host(), item->addr.host);
_dlg->list_con->SetItemText(_clnt_count, _dlg->ccp_addr(), item->addr.addres);
// fill port
str.Format("%d", (int)item->addr.port);
_dlg->list_con->SetItemText(_clnt_count, _dlg->ccp_port(), str);
// fill state
_load_string(str, item->state);
_dlg->list_con->SetItemText(_clnt_count, _dlg->ccp_state(), str);
// fill file name
_dlg->list_con->SetItemText(_clnt_count, _dlg->ccp_fname(), item->file_name);
// fill file size
if (item->total_sz > 0xFFFFF) {
dval = item->total_sz / (1024*1024);
str.Format("%.2f mb", dval);
} else {
dval = item->total_sz / 1024;
str.Format("%.2f kb", dval);
}
_dlg->list_con->SetItemText(_clnt_count, _dlg->ccp_fsize(), str);
// fill time
sfx_time_hlp *thelper = new sfx_time_hlp;
thelper->st_time = new CTime;
*(thelper->st_time) = CTime::GetCurrentTime();
thelper->item = item;
thelper->timer_id = _dlg->SetTimer(sfx_data(thelper), 500, 0);
item->if_time = thelper;
str = thelper->st_time->Format("%H:%M:%S");
_dlg->list_con->SetItemText(_clnt_count, _dlg->ccp_time(), str);
//if (_dlg->list_serv->GetSelectionMark() == item->iface_i)
// _dlg->set_serv_btn_state(item->state);
_dlg->list_con->SetItemData(_clnt_count, (DWORD_PTR)item);
item->if_data = _clnt_count;
++_clnt_count;
#ifdef REDRAW_LIST
_dlg->list_con->RedrawWindow();
#endif
#ifdef USE_SLOW_MODE
Sleep(SLOW_MODE_DELAY);
#endif
return OK_OK;
}
sfx_data cfx_gui::_on_uc_modify(const sfx_data ldata, const sfx_data rdata) {
cfx_if::sfx_clnt_item *item = ldata;
CString str;
if (0 != (rdata.i & cfx_if::CMD_UCMF_STATE)) {
_load_string(str, item->state);
_dlg->list_con->SetItemText(item->if_data, _dlg->ccp_state(), str);
//if (_dlg->list_con->GetSelectionMark() == item->iface_i)
// _dlg->set_serv_btn_state(item->state);
}
if (0 != (rdata.i & cfx_if::CMD_UCMF_TOTSZ)) {
if (item->total_sz > 0xFFFFF) {
double dval = item->total_sz / (1024*1024);
str.Format("%.2f mb", dval);
} else {
double dval = item->total_sz / 1024;
str.Format("%.2f kb", dval);
}
_dlg->list_con->SetItemText(item->if_data, _dlg->ccp_fsize(), str);
}
if (0 != (rdata.i & cfx_if::CMD_UCMF_DONSZ)) {
double dval;
if (0 < item->total_sz && 0 < item->done_sz)
dval = (double(item->done_sz) / double(item->total_sz)) * 100;
else
dval = 0;
str.Format("%.2f", dval);
_dlg->list_con->SetItemText(item->if_data, _dlg->ccp_done(), str);
}
if (0 != (rdata.i & cfx_if::CMD_UCMF_ADDR)) {
// fill host and address
_dlg->list_con->SetItemText(item->if_data, _dlg->ccp_host(), item->addr.host);
_dlg->list_con->SetItemText(item->if_data, _dlg->ccp_addr(), item->addr.addres);
// fill port
str.Format("%d", (int)item->addr.port);
_dlg->list_con->SetItemText(item->if_data, _dlg->ccp_port(), str);
}
if (0 != (rdata.i & cfx_if::CMD_UCMF_FNAME)) {
_dlg->list_con->SetItemText(item->if_data, _dlg->ccp_fname(), item->file_name);
}
#ifdef REDRAW_LIST
_dlg->list_con->RedrawWindow();
#endif
#ifdef USE_SLOW_MODE
Sleep(SLOW_MODE_DELAY);
#endif
return OK_OK;
}
sfx_data cfx_gui::_on_uc_kill(const sfx_data ldata, const sfx_data rdata) {
WaitForSingleObject(_kill_mutex, INFINITE);
cfx_if::sfx_clnt_item *item = ldata;
// fix other indexes
for (int i = _dlg->list_con->GetItemCount()-1; item->if_data.i < i; --i) {
cfx_if::sfx_clnt_item *si;
si = (cfx_if::sfx_clnt_item *)_dlg->list_con->GetItemData(i);
--(si->if_data.i);
}
// stop timer
sfx_time_hlp *thelper = item->if_time;
_dlg->KillTimer(thelper->timer_id);
CTimeSpan tmp = CTime::GetCurrentTime() - *thelper->st_time;
CString str = tmp.Format("%H:%M:%S");
str = CString("Host: ") + item->addr.host + "\n" +
"ip: " + item->addr.addres + "\n" +
"file name: " + item->file_name + "\n\n" +
"Operation completed for " + str;
MessageBox(_dlg->m_hWnd, str, "fexchange: done", MB_APPLMODAL|MB_OK|MB_ICONINFORMATION);
delete (CTime *)thelper->st_time;
delete thelper;
// delete it
_dlg->list_con->DeleteItem(item->if_data);
// _dlg->set_serv_btn_state(cfx_if::ST_SERV_LISTENING);
--_clnt_count;
#ifdef REDRAW_LIST
_dlg->list_con->RedrawWindow();
#endif
#ifdef USE_SLOW_MODE
Sleep(SLOW_MODE_DELAY);
#endif
ReleaseMutex(_kill_mutex);
return OK_OK;
}
sfx_data cfx_gui::_on_ask_acceptic(const sfx_data ldata, const sfx_data rdata) {
sfx_addr_info *info = ldata;
CString str;
str.FormatMessage(MSG_ACCEPTCON, info->host, info->addres, info->port);
if (IDYES == MessageBox(_dlg->m_hWnd, str, "fexchange: question", MB_YESNO|MB_APPLMODAL|MB_ICONQUESTION))
return OK_OK;
return OK_CANCEL;
}
sfx_data cfx_gui::_on_ask_filename(const sfx_data ldata, const sfx_data rdata) {
cfx_askfile_struct *afs = ldata;
int *len = rdata;
BOOL is_open_dlg;
if (0 != (afs->flags & cfx_if::CMD_ASKFN_OPEN))
is_open_dlg = TRUE;
else
is_open_dlg = FALSE;
CString str;
str.LoadString(RS_DLG_FILTER);
DWORD dlg_flags = OFN_DONTADDTORECENT|OFN_NOTESTFILECREATE|
OFN_HIDEREADONLY|OFN_ENABLESIZING|OFN_EXPLORER|OFN_NOCHANGEDIR;
if (0 != (afs->flags & cfx_if::CMD_ASKFN_MSTEX))
dlg_flags |= OFN_FILEMUSTEXIST;
if (0 != (afs->flags & cfx_if::CMD_ASKFN_OVWRITE))
dlg_flags |= OFN_OVERWRITEPROMPT;
CFileDialog opn_dlg(is_open_dlg, NULL, afs->init_fname, dlg_flags, str, _dlg);
if (IDOK == opn_dlg.DoModal()) {
str = opn_dlg.GetPathName();
*len = str.GetLength();
if (afs->buf_sz > *len) {
strcpy(afs->buf, str);
return OK_OK;
} else {
return OK_REPEAT;
}
}
return OK_CANCEL;
}
} // end of namespace fx_ns
Соседние файлы в папке fexchange