PrioritizedObserverContainer::PrioritizedObserverContainer(ListType& SavedInList,bool ClassObserver,int16 Priority, Observer &ObserverInstance)
    : SavedInList(SavedInList),ObserverInstance(ObserverInstance)
{
    this->ClassObserver=ClassObserver;
    this->Priority=Priority;
    CheckPriority();
}
void PrioritizedObserverContainer::SetPriority(int16 Priority)
{
    this->Priority=Priority;
    CheckPriority();
    SavedInList.sort(SortComparator);
    SavedInList.unique(UniquenessComparator);
}
Пример #3
0
void ShowPopup(HWND hwnd, HWND target_hwnd)
{
    // リソースからメニューを取得
    const auto hMenu    = ::LoadMenu(g_hInst, MAKEINTRESOURCE(100));
    const auto hSubMenu = ::GetSubMenu(hMenu, 0);

    // チェックマークを付ける
    CheckTopMost (target_hwnd, hSubMenu);
    CheckOpaque  (target_hwnd, ::GetSubMenu(hSubMenu, 2));
    CheckPriority(target_hwnd, ::GetSubMenu(hSubMenu, 3));

    // Article ID: Q135788
    // ポップアップメニューから処理を戻すために必要
    ::SetForegroundWindow(hwnd);

    // ポップアップメニューを表示
    POINT pt;
    ::GetCursorPos(&pt);

    const auto CmdID = ::TrackPopupMenu
    (
        hSubMenu, TPM_LEFTALIGN | TPM_NONOTIFY | TPM_RETURNCMD,
        pt.x, pt.y, 0, hwnd, nullptr
    );
    //WriteLog(elDebug, TEXT("%s: CmdId = %d"), PLUGIN_NAME, CmdID);

    // 表示したメニューを破棄
    ::DestroyMenu(hMenu);

    // Article ID: Q135788
    // ポップアップメニューから処理を戻すために必要
    ::PostMessage(hwnd, WM_NULL, 0, 0);

    // コマンドを実行
    if ( CmdID == 40000 )
    {
        ToggleTopMost(target_hwnd);
    }
    else if ( CmdID == 40001 )
    {
        OpenAppFolder(target_hwnd);
    }
    else if ( 40002 <= CmdID && CmdID <= 40005 )
    {
        ExecutePluginCommand(TEXT(":system"), CmdID - 40002);
    }
    else if ( CmdID == 40006 )
    {
        settings->load();
    }
    else if ( 41000 < CmdID && CmdID < 42000 )
    {
        SetOpaque(target_hwnd, BYTE(255 * (CmdID - 41000) / 100));
    }
    else if ( 42000 < CmdID && CmdID < 43000 )
    {
        SetPriority(target_hwnd, priority_sheet[CmdID - 42001]);
    }
}
Пример #4
0
/*表达式求值*/
BOOLEAN EvaluateExpression()
{
	int temp;//临时变量
	char theta;//存放操作符的变量
	int itheta;//存放出栈的操作符的变量add by me
	int a,b;//存放表达式运算时的中间值
	int topOpnd;//栈顶操作数
	char topOptr;//栈顶操作符
	
	Stack OPTR=InitStack();//操作符栈
	Stack OPND=InitStack();//操作数栈

	if(!Push(&OPTR,'#'))//操作符栈中的第一个为#字符
		return FALSE;

	GetInput();//从键盘获得输入

	while(Optr!='#'||GetTop(OPTR)!='#')
	{//如果Optr>=0,表示有操作数输入
		if(Opnd>=0)Push(&OPND,Opnd);
		switch(CheckPriority(GetTop(OPTR),Optr))
		{
		case '<'://栈顶元素优先权低
			if(!Push(&OPTR,Optr))return FALSE;
				GetInput();
			break;
		case '='://脱括号并接收键盘输入
			Pop(&OPTR,&temp);GetInput();
			break;
		case '>'://退栈并将运算结果入栈
			//先用itheta得到操作符在赋给theta
			Pop(&OPTR,&itheta);
			Pop(&OPND,&b);
			Pop(&OPND,&a);
			theta = (char)( itheta );
			Push(&OPND,Calc(a,itheta,b));
			Opnd=-1;
			break;

		}
	}
	//本算法中,当输入只有一个操作数然后就输入回车符时,
	//OPND.pTop==OPND.pBase
	//如果OPND.pTop==OPND.pBase并且Opnd<0,则说明用户
	//未输入任何操作和操作符而直接输入[回车],程序直接
	//退出运行
	if(OPND.pTop==OPND.pBase&&Opnd<0)
	{
		printf("\n\n感谢使用!\n");
		exit(1);

	}
	else if(OPND.pTop==OPND.pBase)
		Result=Opnd;
	else
	{
		Result=GetTop(OPND);
		DestoryStack(&OPND);
		DestoryStack(&OPTR);
	}
	return TRUE;

}