void show_popup(HWND hDlg, LPCTSTR pszTitle, LPCTSTR pszText, int iNumber, int ActType) { LPMSGPOPUPDATA pmpd = (LPMSGPOPUPDATA)mir_alloc(sizeof(MSGPOPUPDATA)); if (!pmpd) return; POPUPDATAT_V2 pd = { 0 }; pd.cbSize = sizeof(pd); pd.lchContact = NULL; //(HANDLE)wParam; pd.lchIcon = Skin_LoadIcon(PopupsList[iNumber].Icon); mir_tstrncpy(pd.lptzText, pszText, _countof(pd.lptzText)); mir_tstrncpy(pd.lptzContactName, pszTitle, _countof(pd.lptzContactName)); switch (MyOptions.DefColors) { case byCOLOR_WINDOWS: pd.colorBack = GetSysColor(COLOR_BTNFACE); pd.colorText = GetSysColor(COLOR_WINDOWTEXT); break; case byCOLOR_OWN: pd.colorBack = PopupsList[iNumber].colorBack; pd.colorText = PopupsList[iNumber].colorText; break; case byCOLOR_POPUP: pd.colorBack = pd.colorText = 0; break; } if (iNumber == 0 && ActType != 0) pd.PluginWindowProc = (WNDPROC)PopupDlgProc; else pd.PluginWindowProc = (WNDPROC)PopupDlgProc2; pd.PluginData = pmpd; if (iNumber == 0) pd.iSeconds = -1; else pd.iSeconds = MyOptions.Timeout; pd.hNotification = NULL; pd.lpActions = pmpd->pa; pmpd->hDialog = hDlg; if (ActType == 1) { MakePopupAction(pmpd->pa[pd.actionCount++], IDYES); MakePopupAction(pmpd->pa[pd.actionCount++], IDNO); } CallService(MS_POPUP_ADDPOPUPT, (WPARAM)&pd, APF_NEWDATA); }
/** * Dummi modal MsgBox for popup, * this set call function in wait stait and do not freece miranda main thread * the window is outside the desktop */ static INT_PTR CALLBACK MsgBoxPop(HWND hDlg, UINT uMsg, WPARAM, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: LPMSGBOX pMsgBox = (LPMSGBOX)lParam; MoveWindow(hDlg, -10, -10, 0, 0, FALSE); LPMSGPOPUPDATA pmpd = (LPMSGPOPUPDATA)mir_alloc(sizeof(MSGPOPUPDATA)); if (pmpd) { POPUPDATAT_V2 pd = { 0 }; pd.cbSize = sizeof(pd); pd.lchContact = NULL; //(HANDLE)wParam; // icon pd.lchIcon = MsgLoadIcon(pMsgBox); mir_tstrncpy(pd.lptzContactName, pMsgBox->ptszTitle, _countof(pd.lptzContactName)); mir_tstrncpy(pd.lptzText, pMsgBox->ptszMsg, _countof(pd.lptzText)); // CALLBAC Proc pd.PluginWindowProc = PopupProc; pd.PluginData = pmpd; pd.iSeconds = -1; pd.lpActions = pmpd->pa; // set color of popup switch (pMsgBox->uType & MB_ICONMASK) { case MB_ICON_ERROR: pd.colorBack = RGB(200, 10, 0); pd.colorText = RGB(255, 255, 255); break; case MB_ICON_WARNING: pd.colorBack = RGB(200, 100, 0); pd.colorText = RGB(255, 255, 255); break; default: if (pMsgBox->uType & MB_CUSTOMCOLOR) { pd.colorBack = pMsgBox->colorBack; pd.colorText = pMsgBox->colorText; } } // handle for MakePopupAction pmpd->hDialog = hDlg; // active buttons switch (MB_TYPE(pMsgBox->uType)) { case MB_OK: MakePopupAction(pmpd->pa[pd.actionCount++], IDOK); break; case MB_OKCANCEL: MakePopupAction(pmpd->pa[pd.actionCount++], IDOK); MakePopupAction(pmpd->pa[pd.actionCount++], IDCANCEL); break; case MB_RETRYCANCEL: MakePopupAction(pmpd->pa[pd.actionCount++], IDRETRY); MakePopupAction(pmpd->pa[pd.actionCount++], IDCANCEL); break; case MB_YESNO: MakePopupAction(pmpd->pa[pd.actionCount++], IDYES); MakePopupAction(pmpd->pa[pd.actionCount++], IDNO); break; case MB_ABORTRETRYIGNORE: MakePopupAction(pmpd->pa[pd.actionCount++], IDABORT); MakePopupAction(pmpd->pa[pd.actionCount++], IDRETRY); MakePopupAction(pmpd->pa[pd.actionCount++], IDIGNORE); break; case MB_YESNOCANCEL: MakePopupAction(pmpd->pa[pd.actionCount++], IDYES); MakePopupAction(pmpd->pa[pd.actionCount++], IDNO); MakePopupAction(pmpd->pa[pd.actionCount++], IDCANCEL); break; case MB_YESALLNO: MakePopupAction(pmpd->pa[pd.actionCount++], IDYES); MakePopupAction(pmpd->pa[pd.actionCount++], IDALL); MakePopupAction(pmpd->pa[pd.actionCount++], IDNO); break; } // create popup CallService(MS_POPUP_ADDPOPUPT, (WPARAM)&pd, APF_NEWDATA); if (MB_TYPE(pMsgBox->uType) == MB_OK) EndDialog(hDlg, IDOK); } break; } return FALSE; }