📄 mainfrm.cpp
字号:
server = cmdLine.substr(i);
} else {
server = cmdLine.substr(i, j-i);
i = j + 1;
if( (j = cmdLine.find_first_of("\\/ ", i)) == string::npos) {
user = cmdLine.substr(i);
} else {
user = cmdLine.substr(i, j-i);
}
}
if(!server.empty()) {
HubFrame::openWindow(m_hWndMDIClient, &ctrlTab, server);
}
if(!user.empty()) {
try {
QueueManager::getInstance()->addList(ClientManager::getInstance()->getUser(user));
} catch(const Exception&) {
// ...
}
}
}
}
LRESULT MainFrame::onCopyData(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) {
string cmdLine = (LPCSTR) (((COPYDATASTRUCT *)lParam)->lpData);
parseCommandLine(Util::getAppName() + " " + cmdLine);
return true;
}
LRESULT MainFrame::onContextMenu(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) {
RECT rc; // client area of window
POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; // location of mouse click
// Get the bounding rectangle of the client area.
ctrlTransfers.GetClientRect(&rc);
ctrlTransfers.ScreenToClient(&pt);
if (PtInRect(&rc, pt) && ctrlTransfers.GetSelectedCount() > 0)
{
ctrlTransfers.ClientToScreen(&pt);
transferMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, m_hWnd);
return TRUE;
}
return FALSE;
}
LRESULT MainFrame::OnFileSearch(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
SearchFrame* pChild = new SearchFrame();
pChild->setTab(&ctrlTab);
pChild->CreateEx(m_hWndClient);
return 0;
}
LRESULT MainFrame::onFavorites(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
if(FavoriteHubsFrame::frame == NULL) {
FavoriteHubsFrame* pChild = new FavoriteHubsFrame();
pChild->setTab(&ctrlTab);
pChild->CreateEx(m_hWndClient);
} else {
MDIActivate(FavoriteHubsFrame::frame->m_hWnd);
}
return 0;
}
LRESULT MainFrame::onFavoriteUsers(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
if(UsersFrame::frame == NULL) {
UsersFrame* pChild = new UsersFrame();
pChild->setTab(&ctrlTab);
pChild->CreateEx(m_hWndClient);
} else {
MDIActivate(UsersFrame::frame->m_hWnd);
}
return 0;
}
LRESULT MainFrame::onNotepad(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
if(NotepadFrame::frame == NULL) {
NotepadFrame* pChild = new NotepadFrame();
pChild->setTab(&ctrlTab);
pChild->CreateEx(m_hWndClient);
} else {
MDIActivate(NotepadFrame::frame->m_hWnd);
}
return 0;
}
LRESULT MainFrame::onQueue(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
if(QueueFrame::frame == NULL) {
QueueFrame* pChild = new QueueFrame();
pChild->setTab(&ctrlTab);
pChild->CreateEx(m_hWndClient);
} else {
MDIActivate(QueueFrame::frame->m_hWnd);
}
return 0;
}
LRESULT MainFrame::OnFileConnect(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
if(PublicHubsFrame::frame == NULL) {
PublicHubsFrame* pChild = new PublicHubsFrame();
pChild->setTab(&ctrlTab);
pChild->CreateEx(m_hWndClient);
} else {
MDIActivate(PublicHubsFrame::frame->m_hWnd);
}
return 0;
}
LRESULT MainFrame::onSearchSpy(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
if(SpyFrame::frame == NULL) {
SpyFrame* pChild = new SpyFrame();
pChild->setTab(&ctrlTab);
pChild->CreateEx(m_hWndClient);
} else {
MDIActivate(SpyFrame::frame->m_hWnd);
}
return 0;
}
LRESULT MainFrame::onFileADLSearch(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
if(ADLSearchFrame::frame == NULL)
{
ADLSearchFrame* pChild = new ADLSearchFrame();
pChild->setTab(&ctrlTab);
pChild->CreateEx(m_hWndClient);
} else
{
MDIActivate(ADLSearchFrame::frame->m_hWnd);
}
return 0;
}
LRESULT MainFrame::OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
CAboutDlg dlg;
dlg.DoModal(m_hWnd);
return 0;
}
LRESULT MainFrame::OnFileSettings(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
PropertiesDlg dlg(SettingsManager::getInstance());
short lastPort = (short)SETTING(IN_PORT);
int lastConn = SETTING(CONNECTION_TYPE);
if(dlg.DoModal(m_hWnd) == IDOK)
{
SettingsManager::getInstance()->save();
if(SETTING(CONNECTION_TYPE) != lastConn || SETTING(IN_PORT) != lastPort) {
startSocket();
}
ClientManager::getInstance()->infoUpdated();
}
return 0;
}
void MainFrame::onHttpComplete(HttpConnection* /*aConn*/) {
try {
SimpleXML xml;
xml.fromXML(versionInfo);
xml.stepIn();
if(xml.findChild("Version")) {
if(atof(xml.getChildData().c_str()) > VERSIONFLOAT) {
xml.resetCurrentChild();
if(xml.findChild("Message")) {
const string& msg = xml.getChildData();
xml.resetCurrentChild();
if(xml.findChild("Title")) {
MessageBox(msg.c_str(), xml.getChildData().c_str());
}
}
xml.resetCurrentChild();
if(xml.findChild("VeryOldVersion")) {
if(atof(xml.getChildData().c_str()) >= VERSIONFLOAT) {
xml.resetCurrentChild();
if(xml.findChild("URL")) {
MessageBox(("Your version of DC++ is very old and will be shut down. Please get a new one at \r\n" + xml.getChildData()).c_str());
oldshutdown = true;
PostMessage(WM_CLOSE);
}
}
}
}
}
} catch (const Exception&) {
// ...
}
}
LRESULT MainFrame::onGetToolTip(int idCtrl, LPNMHDR pnmh, BOOL& /*bHandled*/) {
LPNMTTDISPINFO pDispInfo = (LPNMTTDISPINFO)pnmh;
pDispInfo->szText[0] = 0;
if((idCtrl != 0) && !(pDispInfo->uFlags & TTF_IDISHWND))
{
int stringId = -1;
switch(idCtrl) {
case ID_FILE_CONNECT: stringId = ResourceManager::MENU_FILE_PUBLIC_HUBS; break;
case ID_FILE_RECONNECT: stringId = ResourceManager::MENU_FILE_RECONNECT; break;
case IDC_FOLLOW: stringId = ResourceManager::MENU_FILE_FOLLOW_REDIRECT; break;
case IDC_FAVORITES: stringId = ResourceManager::MENU_FILE_FAVORITE_HUBS; break;
case IDC_QUEUE: stringId = ResourceManager::MENU_FILE_DOWNLOAD_QUEUE; break;
case ID_FILE_SEARCH: stringId = ResourceManager::MENU_FILE_SEARCH; break;
case ID_FILE_SETTINGS: stringId = ResourceManager::MENU_FILE_SETTINGS; break;
case IDC_NOTEPAD: stringId = ResourceManager::MENU_FILE_NOTEPAD; break;
case IDC_FILE_ADL_SEARCH: stringId = ResourceManager::MENU_FILE_ADL_SEARCH; break;
case IDC_FINISHED: stringId = ResourceManager::FINISHED_DOWNLOADS; break; // tooltip
case IDC_FINISHED_UL: stringId = ResourceManager::FINISHED_UPLOADS; break; // Finished Uploads tooltip
}
if(stringId != -1) {
strncpy(pDispInfo->lpszText, ResourceManager::getInstance()->getString((ResourceManager::Strings)stringId).c_str(), 79);
pDispInfo->uFlags |= TTF_DI_SETITEM;
}
}
return 0;
}
void MainFrame::autoConnect(const FavoriteHubEntry::List& fl) {
for(FavoriteHubEntry::List::const_iterator i = fl.begin(); i != fl.end(); ++i) {
FavoriteHubEntry* entry = *i;
if(entry->getConnect())
HubFrame::openWindow(m_hWndMDIClient, &ctrlTab, entry->getServer(), entry->getNick(), entry->getPassword(), entry->getUserDescription());
}
}
LRESULT MainFrame::onPrivateMessage(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
int i = -1;
while( (i = ctrlTransfers.GetNextItem(i, LVNI_SELECTED)) != -1) {
PrivateFrame::openWindow(((ItemInfo*)ctrlTransfers.GetItemData(i))->user, m_hWndMDIClient, &ctrlTab);
}
return 0;
}
LRESULT MainFrame::onRemoveAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
int i = -1;
while( (i = ctrlTransfers.GetNextItem(i, LVNI_SELECTED)) != -1) {
QueueManager::getInstance()->removeSources(((ItemInfo*)ctrlTransfers.GetItemData(i))->user, QueueItem::Source::FLAG_REMOVED);
}
return 0;
}
LRESULT MainFrame::onForce(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
int i = -1;
while( (i = ctrlTransfers.GetNextItem(i, LVNI_SELECTED)) != -1) {
ctrlTransfers.SetItemText(i, COLUMN_STATUS, CSTRING(CONNECTING_FORCED));
((ItemInfo*)ctrlTransfers.GetItemData(i))->user->connect();
}
return 0;
}
void MainFrame::updateTray(bool add /* = true */) {
if(add) {
NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;
nid.uID = 0;
nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
nid.uCallbackMessage = WM_APP + 242;
nid.hIcon = (HICON)::LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
strncpy(nid.szTip, "DC++",64);
nid.szTip[63] = '\0';
lastMove = GET_TICK() - 1000;
::Shell_NotifyIcon(NIM_ADD, &nid);
trayIcon = true;
} else {
NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;
nid.uID = 0;
nid.uFlags = 0;
::Shell_NotifyIcon(NIM_DELETE, &nid);
ShowWindow(SW_SHOW);
trayIcon = false;
}
}
/**
* @todo Fix so that the away mode is not reset if it was set manually...
*/
LRESULT MainFrame::onSize(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
{
if(wParam == SIZE_MINIMIZED) {
if(BOOLSETTING(AUTO_AWAY)) {
Util::setAway(true);
}
if(BOOLSETTING(MINIMIZE_TRAY)) {
updateTray(true);
ShowWindow(SW_HIDE);
}
maximized = IsZoomed() > 0;
} else if( (wParam == SIZE_RESTORED || wParam == SIZE_MAXIMIZED) ) {
if(BOOLSETTING(AUTO_AWAY)) {
Util::setAway(false);
}
if(trayIcon) {
updateTray(false);
}
}
bHandled = FALSE;
return 0;
}
LRESULT MainFrame::onGetList(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
int i = -1;
while( (i = ctrlTransfers.GetNextItem(i, LVNI_SELECTED)) != -1) {
try {
QueueManager::getInstance()->addList(((ItemInfo*)ctrlTransfers.GetItemData(i))->user);
} catch(const QueueException& e) {
ctrlStatus.SetText(0, e.getError().c_str());
} catch(const FileException& e) {
dcdebug("MainFonGetList caught %s\n", e.getError().c_str());
}
}
return 0;
}
LRESULT MainFrame::onEndSession(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) {
if(c != NULL) {
c->removeListener(this);
delete c;
c = NULL;
}
WINDOWPLACEMENT wp;
wp.length = sizeof(wp);
GetWindowPlacement(&wp);
CRect rc;
GetWindowRect(rc);
if(wp.showCmd == SW_SHOW || wp.showCmd == SW_SHOWNORMAL) {
SettingsManager::getInstance()->set(SettingsManager::MAIN_WINDOW_POS_X, rc.left);
SettingsManager::getInstance()->set(SettingsManager::MAIN_WINDOW_POS_Y, rc.top);
SettingsManager::getInstance()->set(SettingsManager::MAIN_WINDOW_SIZE_X, rc.Width());
SettingsManager::getInstance()->set(SettingsManager::MAIN_WINDOW_SIZE_Y, rc.Height());
}
if(wp.showCmd == SW_SHOWNORMAL || wp.showCmd == SW_SHOW || wp.showCmd == SW_SHOWMAXIMIZED || wp.showCmd == SW_MAXIMIZE)
SettingsManager::getInstance()->set(SettingsManager::MAIN_WINDOW_STATE, (int)wp.showCmd);
WinUtil::saveHeaderOrder(ctrlTransfers, SettingsManager::MAINFRAME_ORDER,
SettingsManager::MAINFRAME_WIDTHS, COLUMN_LAST, columnIndexes, columnSizes);
QueueManager::getInstance()->saveQueue();
SettingsManager::getInstance()->save();
return 0;
}
LRESULT MainFrame::OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) {
if(c != NULL) {
c->removeListener(this);
delete c;
c = NULL;
}
if(!closing) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -