void WmLButtonDblclkProc(HWND hwnd, LPARAM lParam){ ChannelData *cd; bool changeFlg = FALSE; ChannelDataLock.on(); cd = channelDataTop; while(cd){ int x = LOWORD(lParam); int y = HIWORD(lParam); if (cd->checkDown(LOWORD(lParam), HIWORD(lParam))){ if (!(cd->isSelected())){ changeFlg = TRUE; } if (!(cd->getOpenFlg())){ changeFlg = TRUE; cd->setOpenFlg(TRUE); } else { changeFlg = TRUE; cd->setOpenFlg(FALSE); } cd->setSelected(TRUE); } else { if (cd->isSelected()){ changeFlg = TRUE; } cd->setSelected(FALSE); } /* int sx = cd->getPosX() + cd->getWidth(); int sy = cd->getPosY(); int index = 0; ServentData *sd = cd->getServentDataTop(); while(sd){ if ( ( (!cd->getOpenFlg()) && (sx + index*14 < x) && (x < sx + (index+1)*14) && (sy < y) && (y < sy + 14) ) || sd->checkDown(LOWORD(lParam), HIWORD(lParam)) ){ if (!sd->getSelected()){ changeFlg = TRUE; } sd->setSelected(TRUE); } else { if (sd->getSelected()){ changeFlg = TRUE; } sd->setSelected(FALSE); } sd = sd->getNextData(); index++; }*/ cd = cd->getNextData(); } ChannelDataLock.off(); if (changeFlg){ MakeBack(hwnd); } }
void PopupChannelMenu(int channel_id){ POINT pos; MENUITEMINFO info, separator; HMENU hMenu; DWORD dwID; hMenu = CreatePopupMenu(); memset(&separator, 0, sizeof(MENUITEMINFO)); separator.cbSize = sizeof(MENUITEMINFO); separator.fMask = MIIM_ID | MIIM_TYPE; separator.fType = MFT_SEPARATOR; separator.wID = 8000; memset(&info, 0, sizeof(MENUITEMINFO)); info.cbSize = sizeof(MENUITEMINFO); info.fMask = MIIM_ID | MIIM_TYPE; info.fType = MFT_STRING; ChannelData *cd = findChannelData(channel_id); if (cd == NULL){ return; } info.wID = 1001; info.dwTypeData = "切断"; InsertMenuItem(hMenu, -1, true, &info); InsertMenuItem(hMenu, -1, true, &separator); info.wID = 1000; info.dwTypeData = "再生"; InsertMenuItem(hMenu, -1, true, &info); InsertMenuItem(hMenu, -1, true, &separator); info.wID = 1002; info.dwTypeData = "再接続"; InsertMenuItem(hMenu, -1, true, &info); info.wID = 1003; info.dwTypeData = "キープ"; InsertMenuItem(hMenu, -1, true, &info); InsertMenuItem(hMenu, -1, true, &separator); if (!cd->getOpenFlg()){ info.wID = 1004; info.dwTypeData = "直下表示"; InsertMenuItem(hMenu, -1, true, &info); } else { info.wID = 1005; info.dwTypeData = "直下隠蔽"; InsertMenuItem(hMenu, -1, true, &info); } GetCursorPos(&pos); dwID = TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_RETURNCMD, pos.x, pos.y, 0, guiWnd, NULL); DestroyMenu(hMenu); cd = findChannelData(channel_id); if (cd == NULL){ return; } Channel *c = chanMgr->findChannelByChannelID(channel_id); if (c == NULL){ return; } switch(dwID){ case 1000: // 再生 chanMgr->playChannel(c->info); break; case 1001: // 切断 // bump中は切断しない if (!c->bumped) { c->thread.active = false; c->thread.finish = true; } break; case 1002: // 再接続 // 直下かつ受信中であれば確認メッセージ表示 if (cd->isTracker() && cd->getStatus() == Channel::S_RECEIVING) { int id; id = MessageBox(guiWnd, "直下ですが再接続しますか?", "直下警告", MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2); if (id != IDYES) break; } c->bump = true; break; case 1003: // キープ if (!c->stayConnected){ c->stayConnected = true; } else { c->stayConnected = false; } break; case 1004: // 直下表示 cd->setOpenFlg(TRUE); MakeBack(guiWnd); break; case 1005: // 直下隠蔽 cd->setOpenFlg(FALSE); MakeBack(guiWnd); break; } }