コード例 #1
0
ファイル: Notifications.cpp プロジェクト: Seldom/miranda-ng
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);
}
コード例 #2
0
ファイル: dlg_msgbox.cpp プロジェクト: kxepal/miranda-ng
/**
* 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;
}