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); }
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]); } }
/*表达式求值*/ 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; }