/////////////////////////////////////////////////////////////////////////////// // NotifyVerbose /////////////////////////////////////////////////////////////////////////////// void iUserNotify::NotifyVerbose(const TCHAR* format, ...) { va_list args; va_start(args, format); HandleNotify(V_VERBOSE, format, args); va_end(args); }
/////////////////////////////////////////////////////////////////////////////// // NotifyNormal /////////////////////////////////////////////////////////////////////////////// void iUserNotify::NotifyNormal(const TCHAR* format, ...) { va_list args; va_start(args, format); HandleNotify(V_NORMAL, format, args); va_end(args); }
/////////////////////////////////////////////////////////////////////////////// // NotifySilent /////////////////////////////////////////////////////////////////////////////// void iUserNotify::NotifySilent(const TCHAR* format, ...) { va_list args; va_start(args, format); HandleNotify(V_SILENT, format, args); va_end(args); }
/////////////////////////////////////////////////////////////////////////////// // Notify /////////////////////////////////////////////////////////////////////////////// void iUserNotify::Notify(int verboseLevel, const TCHAR* format, ...) { va_list args; va_start(args, format); HandleNotify(verboseLevel, format, args); va_end(args); }
bool C4FileMonitor::Execute(int iTimeout, pollfd *) { // Check event if (WaitForSingleObject(hEvent, iTimeout) != WAIT_OBJECT_0) return true; // Check handles for (TreeWatch *pWatch = pWatches; pWatch; pWatch = pWatch->Next) { DWORD dwBytes = 0; // Has a notification? if (GetOverlappedResult(pWatch->hDir, &pWatch->ov, &dwBytes, false)) { // Read notifications const char *pPos = pWatch->Buffer; for (;;) { const _FILE_NOTIFY_INFORMATION *pNotify = reinterpret_cast<const _FILE_NOTIFY_INFORMATION *>(pPos); // Handle HandleNotify(pWatch->DirName.getData(), pNotify); // Get next entry if (!pNotify->NextEntryOffset) break; pPos += pNotify->NextEntryOffset; if (pPos >= pWatch->Buffer + Min<size_t>(sizeof(pWatch->Buffer), dwBytes)) break; break; } // Restart directory change notification (flush queue) ReadDirectoryChangesW(pWatch->hDir, pWatch->Buffer, sizeof(pWatch->Buffer), false, C4FileMonitorNotifies, NULL, &pWatch->ov, NULL); dwBytes = 0; while (GetOverlappedResult(pWatch->hDir, &pWatch->ov, &dwBytes, false)) { ReadDirectoryChangesW(pWatch->hDir, pWatch->Buffer, sizeof(pWatch->Buffer), false, C4FileMonitorNotifies, NULL, &pWatch->ov, NULL); dwBytes = 0; } } } ResetEvent(hEvent); return true; }
void fileMonitor::Watch() { while(bShouldWatch) { if(::ReadDirectoryChangesW(hDir, myOverLapped.notify,sizeof(myOverLapped.notify), TRUE, FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_DIR_NAME, 0,&(myOverLapped.overlapped),0)) { DWORD w=::WaitForSingleObject(myOverLapped.overlapped.hEvent,INFINITE); if (w==WAIT_OBJECT_0){ FILE_NOTIFY_INFORMATION *pNotify=(FILE_NOTIFY_INFORMATION*)myOverLapped.notify; HandleNotify(pNotify); NotifyMsg(WM_FILE_FINDED,FALSE,(WPARAM)pPL,file_finded_end_playlist); } } } hWatch=NULL; }
/* Main window procedure */ static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_NOTIFY: return HandleNotify(hwnd, (NMHDR*) lParam); case WM_SIZE: if(wParam == SIZE_RESTORED || wParam == SIZE_MAXIMIZED) HandleResize(hwnd, LOWORD(lParam), HIWORD(lParam)); return 0; case WM_SETFOCUS: SetFocus(hwndHtml); return 0; case WM_COMMAND: switch(LOWORD(wParam)) { case IDM_BACK: SendMessage(hwndHtml, MC_HM_GOBACK, TRUE, 0); break; case IDM_FORWARD: SendMessage(hwndHtml, MC_HM_GOBACK, FALSE, 0); break; } break; case WM_CREATE: { HIMAGELIST tbImgList; TBBUTTON tbButtons[2]; /* Create the html control */ hwndHtml = CreateWindow(MC_WC_HTML, INITIAL_URL, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 0, 0, 0, hwnd, (HMENU) ID_HTML, hInst, NULL); /* Create toolbar control. It provides the 'back' and 'forward' * buttons for walking the browser history. */ hwndToolbar = CreateWindow(TOOLBARCLASSNAME, NULL, WS_CHILD | WS_BORDER | WS_VISIBLE, 0, 0, 0, 0, hwnd, (HMENU) ID_TOOLBAR, hInst, NULL); SendMessage(hwndToolbar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); memset(tbButtons, 0, sizeof(tbButtons)); tbButtons[0].iBitmap = 0; tbButtons[0].idCommand = IDM_BACK; tbButtons[0].fsStyle = BTNS_BUTTON; tbButtons[1].iBitmap = 1; tbButtons[1].idCommand = IDM_FORWARD; tbButtons[1].fsStyle = BTNS_BUTTON; SendMessage(hwndToolbar, TB_ADDBUTTONS, 2, (LPARAM) tbButtons); tbImgList = ImageList_LoadImage(hInst, _T("toolbar"), 24, 1, RGB(255,0,255), IMAGE_BITMAP, LR_CREATEDIBSECTION); SendMessage(hwndToolbar, TB_SETIMAGELIST, 0, (LPARAM) tbImgList); /* Create status control. We show status info the HTML control * sends to us via WM_NOTIFY. */ hwndStatus = CreateWindow(STATUSCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, 0, 0, 0, 0, hwnd, (HMENU) ID_STATUS, hInst, NULL); return 0; } case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, uMsg, wParam, lParam); }
LRESULT CALLBACK CompStrWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HIMC hIMC = NULL; HIMC hOldIMC = NULL; switch (message) { case WM_CREATE: hIMC = ImmCreateContext(); hOldIMC = ImmAssociateContext(hWnd,hIMC); SetWindowLongPtr(hWnd, 0, (LONG_PTR)hOldIMC); fdwProperty = ImmGetProperty(GetKeyboardLayout(0), IGP_PROPERTY); break; case WM_CHAR: HandleChar(hWnd,wParam,lParam); break; case WM_LBUTTONUP: /* fall-through */ case WM_RBUTTONUP: if (hIMC = ImmGetContext(hWnd)) { HMENU hMenu = NULL; InitMenuItemIDTable(); hMenu = CreateImeMenu(hWnd, hIMC, NULL,(message == WM_RBUTTONUP)); if (hMenu) { DWORD dwItemData; DWORD dwPos = (DWORD)GetMessagePos(); int nCmd; nCmd = TrackPopupMenuEx(hMenu, TPM_RETURNCMD | TPM_NONOTIFY | TPM_LEFTBUTTON | TPM_LEFTALIGN | TPM_TOPALIGN, LOWORD(dwPos), HIWORD(dwPos), hWnd, NULL); if (nCmd) { nCmd -= IDM_STARTIMEMENU; dwItemData = FindItemData(nCmd); ImmNotifyIME(hIMC, NI_IMEMENUSELECTED, nCmd, dwItemData); } } EndMenuItemIDTable(); DestroyMenu(hMenu); } break; case WM_IME_SETCONTEXT: if (fShowCand) { lParam &= ~ISC_SHOWUICANDIDATEWINDOW; } if (fdwProperty & IME_PROP_SPECIAL_UI) { // EMPTY } else if (fdwProperty & IME_PROP_AT_CARET) { lParam &= ~ISC_SHOWUICOMPOSITIONWINDOW; } else { // EMPTY } return (DefWindowProc(hWnd, message, wParam, lParam)); case WM_IME_STARTCOMPOSITION: // Normally, we should not call into HandleStartComposition // for IME_PROP_SPECIAL_UI and not IME_PROP_AT_CARET IMEs // we should pass this message to DefWindowProc directly for // this kind of IMEs HandleStartComposition(hWnd,wParam,lParam); // pass this message to DefWindowProc for IME_PROP_SPECIAL_UI // and not IME_PROP_AT_CARET IMEs if (fdwProperty & IME_PROP_SPECIAL_UI) { return (DefWindowProc(hWnd, message, wParam, lParam)); } else if (fdwProperty & IME_PROP_AT_CARET) { // EMPTY } else { return (DefWindowProc(hWnd, message, wParam, lParam)); } break; case WM_IME_ENDCOMPOSITION: // Normally, we should not call into HandleEndComposition // for IME_PROP_SPECIAL_UI and not IME_PROP_AT_CARET IMEs // we should pass this message to DefWindowProc directly for // this kind of IMEs HandleEndComposition(hWnd,wParam,lParam); // pass this message to DefWindowProc for IME_PROP_SPECIAL_UI // and not IME_PROP_AT_CARET IMEs if (fdwProperty & IME_PROP_SPECIAL_UI) { return (DefWindowProc(hWnd, message, wParam, lParam)); } else if (fdwProperty & IME_PROP_AT_CARET) { // EMPTY } else { return (DefWindowProc(hWnd, message, wParam, lParam)); } break; case WM_IME_COMPOSITION: // Normally, we should not call into HandleComposition // for IME_PROP_SPECIAL_UI and not IME_PROP_AT_CARET IMEs // we should pass this message to DefWindowProc directly for // this kind of IMEs HandleComposition(hWnd,wParam,lParam); // pass this message to DefWindowProc for IME_PROP_SPECIAL_UI // and not IME_PROP_AT_CARET IMEs if (fdwProperty & IME_PROP_SPECIAL_UI) { return (DefWindowProc(hWnd, message, wParam, lParam)); } else if (fdwProperty & IME_PROP_AT_CARET) { // EMPTY } else { return (DefWindowProc(hWnd, message, wParam, lParam)); } break; case WM_PAINT: HandlePaint(hWnd,wParam,lParam); break; case WM_IME_NOTIFY: { LRESULT lRet; // Normally, we should not call into HandleNotify // for IME_PROP_SPECIAL_UI and not IME_PROP_AT_CARET IMEs // we should pass this message to DefWindowProc directly for // this kind of IMEs lRet = HandleNotify(hWnd, message, wParam, lParam); // pass this message to DefWindowProc for IME_PROP_SPECIAL_UI // and not IME_PROP_AT_CARET IMEs if (fdwProperty & IME_PROP_SPECIAL_UI) { return (DefWindowProc(hWnd, message, wParam, lParam)); } else if (fdwProperty & IME_PROP_AT_CARET) { // EMPTY } else { return (DefWindowProc(hWnd, message, wParam, lParam)); } return lRet; } case WM_DESTROY: hOldIMC = (HIMC)GetWindowLongPtr(hWnd, 0); hIMC = ImmAssociateContext(hWnd, hOldIMC); ImmDestroyContext(hIMC); break; case WM_INPUTLANGCHANGE: fdwProperty = ImmGetProperty(GetKeyboardLayout(0), IGP_PROPERTY); if (hIMC = ImmGetContext(hWnd)) { CANDIDATEFORM cdf = {0}; if (fdwProperty & IME_PROP_AT_CARET) { cdf.dwIndex = 0; cdf.dwStyle = CFS_CANDIDATEPOS; cdf.ptCurrentPos.x = ptImeUIPos.x; cdf.ptCurrentPos.y = ptImeUIPos.y; ImmSetCandidateWindow(hIMC, &cdf); } else { UINT i; // The candidate position should be decided by a near caret // IME. There are 4 candidate form in the input context for (i = 0; i < 4; i++) { if (!ImmGetCandidateWindow(hIMC, i, &cdf)) { continue; } if (cdf.dwStyle == CFS_DEFAULT) { continue; } cdf.dwStyle = CFS_DEFAULT; ImmSetCandidateWindow(hIMC, &cdf); } } ImmReleaseContext(hWnd, hIMC); } return (DefWindowProc(hWnd, message, wParam, lParam)); default: return (DefWindowProc(hWnd, message, wParam, lParam)); } return 0L; }