BOOL CLayoutManager::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT * pResult, BOOL bPeek) { int i; if (! m_bActive) return FALSE; switch (message) { case WM_GETMINMAXINFO: if (! bPeek) { MINMAXINFO * pMMI = (LPMINMAXINFO) lParam; pMMI->ptMinTrackSize.x = m_dwMinWidth; pMMI->ptMinTrackSize.y = m_dwMinHeight; } break; case WM_NCCALCSIZE: if (wParam) OnNcCalcSize(bPeek, (LPNCCALCSIZE_PARAMS)lParam, pResult); break; case WM_ERASEBKGND: OnEraseBkgnd(bPeek, (HDC)wParam); break; case WM_SIZE: if (! bPeek) OnSize(LOWORD(lParam), HIWORD(lParam)); break; case WM_MOVING: if (bPeek) { OnMoving(wParam, (RECT*)lParam); *pResult = TRUE; return TRUE; } break; case WM_ENTERSIZEMOVE: case WM_EXITSIZEMOVE: if (! bPeek) break; for (i=0; i<m_vControls.size(); i++) m_vControls[i].pWnd->SendMessage(message, wParam, lParam); break; } return FALSE; }
void CSelectMode::OnMouse( wxMouseEvent& event ) { bool event_used = false; if(LeftAndRightPressed(event, event_used)) { if(m_doing_a_main_loop){ ExitMainLoop(); } } if(event_used)return; if(event.LeftDown()) OnLeftDown(event); if(event.MiddleDown()) OnMiddleDown(event); bool dragging = event.Dragging() && (m_button_down || m_middle_button_down); bool moving = event.Moving() || (event.Dragging() && (!(m_button_down || m_middle_button_down))); bool left_up = false; if(event.LeftUp()) { if(m_button_down)left_up = true; m_button_down = false; } if(event.MiddleUp())m_middle_button_down = false; if(left_up) { OnLeftUp(event); } else if(event.RightUp()) { MarkedObjectOneOfEach marked_object; wxGetApp().FindMarkedObject(wxPoint(event.GetX(), event.GetY()), &marked_object); wxGetApp().DoDropDownMenu(wxGetApp().m_frame->m_graphics, wxPoint(event.GetX(), event.GetY()), &marked_object, false, event.ControlDown()); } else if(dragging) { OnDragging(event); } else if(moving) { OnMoving(event); } if(event.GetWheelRotation() != 0) { OnWheelRotation(event); } }
LRESULT CWin::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { LRESULT lRes = 0; BOOL bHandled = TRUE; switch (uMsg) { case WM_CREATE: lRes = OnCreate(uMsg, wParam, lParam, bHandled); break; case WM_CLOSE: lRes = OnClose(uMsg, wParam, lParam, bHandled); break; case WM_DESTROY: lRes = OnDestroy(uMsg, wParam, lParam, bHandled); break; #if defined(WIN32) && !defined(UNDER_CE) //case WM_NCCREATE: lRes = OnNcCreate(uMsg, wParam, lParam, bHandled); break; case WM_NCMOUSEMOVE: lRes = OnNCMouseMove(uMsg, wParam, lParam, bHandled); break; case WM_NCMOUSELEAVE: lRes = OnNCMouseLeave(uMsg, wParam, lParam, bHandled); break; case WM_NCACTIVATE: lRes = OnNcActivate(uMsg, wParam, lParam, bHandled); break; case WM_NCCALCSIZE: lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled); break; case WM_NCPAINT: lRes = OnNcPaint(uMsg, wParam, lParam, bHandled); break; case WM_NCHITTEST: lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled); break; case WM_GETMINMAXINFO: lRes = OnGetMinMaxInfo(uMsg, wParam, lParam, bHandled); break; case WM_MOUSEWHEEL: lRes = OnMouseWheel(uMsg, wParam, lParam, bHandled); break; #endif case WM_ERASEBKGND: lRes = OnEraseBkGnd(uMsg, wParam, lParam, bHandled); break; case WM_SIZE: lRes = OnSize(uMsg, wParam, lParam, bHandled); break; case WM_CHAR: lRes = OnChar(uMsg, wParam, lParam, bHandled); break; case WM_SYSCOMMAND: lRes = OnSysCommand(uMsg, wParam, lParam, bHandled); break; case WM_KEYDOWN: lRes = OnKeyDown(uMsg, wParam, lParam, bHandled); break; case WM_KILLFOCUS: lRes = OnKillFocus(uMsg, wParam, lParam, bHandled); break; case WM_SETFOCUS: lRes = OnSetFocus(uMsg, wParam, lParam, bHandled); break; case WM_LBUTTONUP: lRes = OnLButtonUp(uMsg, wParam, lParam, bHandled); break; case WM_LBUTTONDOWN: lRes = OnLButtonDown(uMsg, wParam, lParam, bHandled); break; case WM_MOUSEMOVE: lRes = OnMouseMove(uMsg, wParam, lParam, bHandled); break; case WM_MOUSELEAVE: lRes = OnMouseLeave(uMsg, wParam, lParam, bHandled); break; case WM_MOUSEHOVER: lRes = OnMouseHover(uMsg, wParam, lParam, bHandled); break; case WM_HOTKEY: lRes = OnHotKey(uMsg, wParam, lParam, bHandled); break; // case WM_TIMER: lRes = OnTimer(uMsg, wParam, lParam, bHandled); break;//OnTimer响应有小问题 case WM_MOVING: lRes = OnMoving(uMsg, wParam, lParam, bHandled); break; case WM_SIZING: lRes = OnSizing(uMsg, wParam, lParam, bHandled); break; case WM_SHOWWINDOW: lRes = OnShowWindow(uMsg, wParam, lParam, bHandled); break; case WM_COMMAND: lRes = OnCommand(uMsg, wParam, lParam, bHandled); break; // case WM_PAINT: lRes = OnPaint(uMsg, wParam, lParam, bHandled); break;//OnPaint响应有问题 case WM_MENUCOMMAND: lRes = OnMenuCommand(uMsg, wParam, lParam, bHandled); break; default: bHandled = FALSE; break; } if (bHandled) return lRes; lRes = ProcessWindowMessage(uMsg, wParam, lParam, bHandled); if (bHandled) return lRes; if(_paintManager && _paintManager->MessageHandler(uMsg,wParam,lParam,lRes)) return lRes; return __super::HandleMessage(uMsg,wParam,lParam); }
static BOOL CALLBACK DlgSkinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_DESTROY: { if (hPreviewBitmap) DeleteObject(hPreviewBitmap); break; } case WM_INITDIALOG: { int it; TranslateDialogDefault(hwndDlg); it=FillAvailableSkinList(hwndDlg); { /* Text Colors */ DWORD c1,c2,c3,c4; c1=DBGetContactSettingDword(NULL,"Menu", "TextColour", CLCDEFAULT_TEXTCOLOUR); c2=DBGetContactSettingDword(NULL,"Menu", "SelTextColour", CLCDEFAULT_SELTEXTCOLOUR); c3=DBGetContactSettingDword(NULL,"FrameTitleBar", "TextColour", CLCDEFAULT_TEXTCOLOUR); c4=DBGetContactSettingDword(NULL,"StatusBar", "TextColour", CLCDEFAULT_TEXTCOLOUR); SendDlgItemMessage(hwndDlg,IDC_COLOUR_MENUNORMAL,CPM_SETCOLOUR,0,c1); SendDlgItemMessage(hwndDlg,IDC_COLOUR_MENUSELECTED,CPM_SETCOLOUR,0,c2); SendDlgItemMessage(hwndDlg,IDC_COLOUR_FRAMES,CPM_SETCOLOUR,0,c3); SendDlgItemMessage(hwndDlg,IDC_COLOUR_STATUSBAR,CPM_SETCOLOUR,0,c4); SendDlgItemMessage(hwndDlg,IDC_COLOUR_MENUNORMAL,CPM_SETDEFAULTCOLOUR,0,c1); SendDlgItemMessage(hwndDlg,IDC_COLOUR_MENUSELECTED,CPM_SETDEFAULTCOLOUR,0,c2); SendDlgItemMessage(hwndDlg,IDC_COLOUR_FRAMES,CPM_SETDEFAULTCOLOUR,0,c3); SendDlgItemMessage(hwndDlg,IDC_COLOUR_STATUSBAR,CPM_SETDEFAULTCOLOUR,0,c4); /* End of Text colors */ } TreeView_SelectItem(GetDlgItem(hwndDlg,IDC_TREE1),(HTREEITEM)it); } return 0; case WM_COMMAND: { int isLoad=0; switch (LOWORD(wParam)) { case IDC_COLOUR_MENUNORMAL: case IDC_COLOUR_MENUSELECTED: case IDC_COLOUR_FRAMES: case IDC_COLOUR_STATUSBAR: SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case IDC_BUTTON_INFO: { char Author[255]; char URL[MAX_PATH]; char Contact[255]; char Description[400]; char text[2000]; SkinListData *sd=NULL; HTREEITEM hti=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_TREE1)); if (hti==0) return 0; { TVITEMA tvi={0}; tvi.hItem=hti; tvi.mask=TVIF_HANDLE|TVIF_PARAM; TreeView_GetItem(GetDlgItem(hwndDlg,IDC_TREE1),&tvi); sd=(SkinListData*)(tvi.lParam); } if (!sd) return 0; if (sd->File && !strchr(sd->File,'%')) { GetPrivateProfileStringA("Skin_Description_Section","Author","(unknown)",Author,sizeof(Author),sd->File); GetPrivateProfileStringA("Skin_Description_Section","URL","",URL,sizeof(URL),sd->File); GetPrivateProfileStringA("Skin_Description_Section","Contact","",Contact,sizeof(Contact),sd->File); GetPrivateProfileStringA("Skin_Description_Section","Description","",Description,sizeof(Description),sd->File); _snprintf(text,sizeof(text),Translate("%s\n\n%s\n\nAuthor(s):\t %s\nContact:\t %s\nWeb:\t %s\n\nFile:\t %s"), sd->Name,Description,Author,Contact,URL,sd->File); } else { _snprintf(text,sizeof(text),Translate("%s\n\n%s\n\nAuthor(s): %s\nContact:\t %s\nWeb:\t %s\n\nFile:\t %s"), "Luna v0.4",Translate("This is default Modern Contact list skin based on 'Luna' theme"),"Angeli-Ka (graphics), FYR (template)","JID: [email protected]","modern.saopp.info",Translate("Inside library")); } MessageBoxA(hwndDlg,text,"Skin Information",MB_OK|MB_ICONINFORMATION); } break; case IDC_BUTTON_APPLY_SKIN: if (HIWORD(wParam)==BN_CLICKED) { SkinListData *sd=NULL; HTREEITEM hti=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_TREE1)); if (hti==0) return 0; { TVITEM tvi={0}; tvi.hItem=hti; tvi.mask=TVIF_HANDLE|TVIF_PARAM; TreeView_GetItem(GetDlgItem(hwndDlg,IDC_TREE1),&tvi); sd=(SkinListData*)(tvi.lParam); } if (!sd) return 0; if (glSkinWasModified>0) { int res=0; if (glSkinWasModified==1) res=MessageBoxA(hwndDlg,Translate("Skin editor contains not stored changes.\n\nAll changes will be lost.\n\n Continue to load new skin?"),Translate("Warning!"),MB_OKCANCEL|MB_ICONWARNING|MB_DEFBUTTON2|MB_TOPMOST); else res=MessageBoxA(hwndDlg,Translate("Current skin was not saved to file.\n\nAll changes will be lost.\n\n Continue to load new skin?"),Translate("Warning!"),MB_OKCANCEL|MB_ICONWARNING|MB_DEFBUTTON2|MB_TOPMOST); if (res!=IDOK) return 0; } LoadSkinFromIniFile(sd->File); LoadSkinFromDB(); glOtherSkinWasLoaded=TRUE; pcli->pfnClcBroadcast( INTM_RELOADOPTIONS,0,0); CLUIFramesOnClistResize2(0,0,0); RedrawCompleteWindow(); CLUIFramesOnClistResize2(0,0,0); { HWND hwnd=(HWND)CallService(MS_CLUI_GETHWND,0,0); RECT rc={0}; GetWindowRect(hwnd, &rc); OnMoving(hwnd,&rc); } if (hCLUIwnd) { SendDlgItemMessage(hCLUIwnd,IDC_LEFTMARGINSPIN,UDM_SETPOS,0,DBGetContactSettingByte(NULL,"CLUI","LeftClientMargin",0)); SendDlgItemMessage(hCLUIwnd,IDC_RIGHTMARGINSPIN,UDM_SETPOS,0,DBGetContactSettingByte(NULL,"CLUI","RightClientMargin",0)); SendDlgItemMessage(hCLUIwnd,IDC_TOPMARGINSPIN,UDM_SETPOS,0,DBGetContactSettingByte(NULL,"CLUI","TopClientMargin",0)); SendDlgItemMessage(hCLUIwnd,IDC_BOTTOMMARGINSPIN,UDM_SETPOS,0,DBGetContactSettingByte(NULL,"CLUI","BottomClientMargin",0)); } } break; case IDC_BUTTON_LOAD: isLoad=1; if (HIWORD(wParam)==BN_CLICKED) { { char str[MAX_PATH]={0}; OPENFILENAMEA ofn={0}; char filter[512]={0}; int res=0; ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; ofn.hwndOwner = hwndDlg; ofn.hInstance = NULL; sprintf(filter,"%s",Translate("Miranda skin file")); memmove(filter+mir_strlen(filter)," (*.msf)\0*.MSF\0\0",sizeof(" (*.msf)\0*.MSF\0\0")); ofn.lpstrFilter = filter; ofn.lpstrFile = str; ofn.Flags = isLoad?(OFN_FILEMUSTEXIST | OFN_HIDEREADONLY) : (OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY); ofn.nMaxFile = sizeof(str); ofn.nMaxFileTitle = MAX_PATH; ofn.lpstrDefExt = "msf"; { DWORD tick=GetTickCount(); res=GetOpenFileNameA(&ofn); if(!res) if (GetTickCount()-tick<100) { res=GetOpenFileNameA(&ofn); if(!res) break; } else break; } if (res) { int it=AddSkinToListFullName(hwndDlg,ofn.lpstrFile); TreeView_SelectItem(GetDlgItem(hwndDlg,IDC_TREE1),(HTREEITEM)it); //SendDlgItemMessage(hwndDlg,IDC_SKINS_LIST,LB_SETCURSEL,it,0); //SendMessage(hwndDlg,WM_COMMAND,MAKEWPARAM(IDC_SKINS_LIST,LBN_SELCHANGE),0); } } } } break; } case WM_DRAWITEM: if (wParam==IDC_PREVIEW) { //TODO:Draw hPreviewBitmap here HDC memDC, imgDC; HBITMAP hbmp,holdbmp,imgOldbmp; int mWidth, mHeight; RECT workRect={0}; HBRUSH hbr=CreateSolidBrush(GetSysColor(COLOR_3DFACE)); DRAWITEMSTRUCT *dis=(DRAWITEMSTRUCT *)lParam; mWidth=dis->rcItem.right-dis->rcItem.left; mHeight=dis->rcItem.bottom-dis->rcItem.top; memDC=CreateCompatibleDC(dis->hDC); hbmp=CreateBitmap32(mWidth,mHeight); holdbmp=SelectObject(memDC,hbmp); workRect=dis->rcItem; OffsetRect(&workRect,-workRect.left,-workRect.top); FillRect(memDC,&workRect,hbr); DeleteObject(hbr); if (hPreviewBitmap) { //variables BITMAP bmp={0}; POINT imgPos={0}; int wWidth,wHeight; int dWidth,dHeight; float xScale=1, yScale=1; //GetSize GetObject(hPreviewBitmap,sizeof(BITMAP),&bmp); wWidth=workRect.right-workRect.left; wHeight=workRect.bottom-workRect.top; if (wWidth<bmp.bmWidth) xScale=(float)wWidth/bmp.bmWidth; if (wHeight<bmp.bmHeight) yScale=(float)wHeight/bmp.bmHeight; xScale=min(xScale,yScale); yScale=xScale; dWidth=(int)(xScale*bmp.bmWidth); dHeight=(int)(yScale*bmp.bmHeight); //CalcPosition imgPos.x=workRect.left+((wWidth-dWidth)>>1); imgPos.y=workRect.top+((wHeight-dHeight)>>1); //DrawImage if (!gl_b_GDIPlusFail) //Use gdi+ engine { DrawAvatarImageWithGDIp(memDC,imgPos.x,imgPos.y,dWidth,dHeight,hPreviewBitmap,0,0,bmp.bmWidth,bmp.bmHeight,8,255); } else { BLENDFUNCTION bf={AC_SRC_OVER, 0, 255, AC_SRC_ALPHA }; imgDC=CreateCompatibleDC(dis->hDC); imgOldbmp=SelectObject(imgDC,hPreviewBitmap); mod_AlphaBlend(memDC,imgPos.x,imgPos.y,dWidth,dHeight,imgDC,0,0,bmp.bmWidth,bmp.bmHeight,bf); SelectObject(imgDC,imgOldbmp); mod_DeleteDC(imgDC); } } BitBlt(dis->hDC,dis->rcItem.left,dis->rcItem.top,mWidth,mHeight,memDC,0,0,SRCCOPY); SelectObject(memDC,holdbmp); DeleteObject(hbmp); mod_DeleteDC(memDC); } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case IDC_TREE1: { NMTREEVIEWA * nmtv = (NMTREEVIEWA *) lParam; if (!nmtv) return 0; if (nmtv->hdr.code==TVN_SELCHANGEDA || nmtv->hdr.code==TVN_SELCHANGEDW) { SkinListData * sd=NULL; if (hPreviewBitmap) { DeleteObject(hPreviewBitmap); hPreviewBitmap=NULL; } if (nmtv->itemNew.lParam) { //char sdFile[MAX_PATH]={0}; sd=(SkinListData*)nmtv->itemNew.lParam; //PathCompactPathExA(sdFile,sd->File,60,0); { char buf[MAX_PATH]; CallService(MS_UTILS_PATHTORELATIVE, (WPARAM)sd->File, (LPARAM)buf); SendDlgItemMessageA(hwndDlg,IDC_EDIT_SKIN_FILENAME,WM_SETTEXT,0,(LPARAM)buf); //TODO made filepath unicode } { char prfn[MAX_PATH]={0}; char imfn[MAX_PATH]={0}; char skinfolder[MAX_PATH]={0}; GetPrivateProfileStringA("Skin_Description_Section","Preview","",imfn,sizeof(imfn),sd->File); GetSkinFolder(sd->File,skinfolder); _snprintf(prfn,sizeof(prfn),"%s\\%s",skinfolder,imfn); CallService(MS_UTILS_PATHTOABSOLUTE,(WPARAM)prfn,(LPARAM) imfn); hPreviewBitmap=skin_LoadGlyphImage(imfn); } EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_APPLY_SKIN),TRUE); EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_INFO),TRUE); if (hPreviewBitmap) InvalidateRect(GetDlgItem(hwndDlg,IDC_PREVIEW),NULL,TRUE); else //prepeare text { char Author[255]; char URL[MAX_PATH]; char Contact[255]; char Description[400]; char text[2000]; SkinListData* sd=NULL; HTREEITEM hti=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_TREE1)); if (hti==0) return 0; { TVITEM tvi={0}; tvi.hItem=hti; tvi.mask=TVIF_HANDLE|TVIF_PARAM; TreeView_GetItem(GetDlgItem(hwndDlg,IDC_TREE1),&tvi); sd=(SkinListData*)(tvi.lParam); } if (!sd) return 0; if(sd->File && !strchr(sd->File,'%')) { GetPrivateProfileStringA("Skin_Description_Section","Author","(unknown)",Author,sizeof(Author),sd->File); GetPrivateProfileStringA("Skin_Description_Section","URL","",URL,sizeof(URL),sd->File); GetPrivateProfileStringA("Skin_Description_Section","Contact","",Contact,sizeof(Contact),sd->File); GetPrivateProfileStringA("Skin_Description_Section","Description","",Description,sizeof(Description),sd->File); _snprintf(text,sizeof(text),Translate("Preview is not available\n\n%s\n----------------------\n\n%s\n\nAUTHOR(S):\n%s\n\nCONTACT:\n%s\n\nHOMEPAGE:\n%s"), sd->Name,Description,Author,Contact,URL); } else { _snprintf(text,sizeof(text),Translate("%s\n\n%s\n\nAUTHORS:\n%s\n\nCONTACT:\n%s\n\nWEB:\n%s\n\n\n"), "Luna v0.4", Translate("This is default Modern Contact list skin based on 'Luna' theme"), "graphics by Angeli-Ka\ntemplate by FYR", "JID: [email protected]", "modern.saopp.info" ); } ShowWindow(GetDlgItem(hwndDlg,IDC_PREVIEW),SW_HIDE); ShowWindow(GetDlgItem(hwndDlg,IDC_STATIC_INFO),SW_SHOW); SendDlgItemMessageA(hwndDlg,IDC_STATIC_INFO,WM_SETTEXT,0,(LPARAM)text); } } else { //no selected SendDlgItemMessage(hwndDlg,IDC_EDIT_SKIN_FILENAME,WM_SETTEXT,0,(LPARAM)TranslateT("Select skin from list")); EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_APPLY_SKIN),FALSE); EnableWindow(GetDlgItem(hwndDlg,IDC_BUTTON_INFO),FALSE); SendDlgItemMessageA(hwndDlg,IDC_STATIC_INFO,WM_SETTEXT,0,(LPARAM)Translate("Please select skin to apply")); ShowWindow(GetDlgItem(hwndDlg,IDC_PREVIEW),SW_HIDE); } ShowWindow(GetDlgItem(hwndDlg,IDC_PREVIEW),hPreviewBitmap?SW_SHOW:SW_HIDE); return 0; } else if (nmtv->hdr.code==TVN_SELCHANGEDA || nmtv->hdr.code==TVN_SELCHANGEDW) { if (nmtv->itemOld.lParam) mir_free((void*)(nmtv->itemOld.lParam)); return 0; } break; } case 0: switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: { { DWORD tick=GetTickCount(); { /* Text Colors */ DWORD c1,c2,c3,c4; c1=SendDlgItemMessage(hwndDlg,IDC_COLOUR_MENUNORMAL,CPM_GETCOLOUR,0,0); c2=SendDlgItemMessage(hwndDlg,IDC_COLOUR_MENUSELECTED,CPM_GETCOLOUR,0,0); c3=SendDlgItemMessage(hwndDlg,IDC_COLOUR_FRAMES,CPM_GETCOLOUR,0,0); c4=SendDlgItemMessage(hwndDlg,IDC_COLOUR_STATUSBAR,CPM_GETCOLOUR,0,0); DBWriteContactSettingDword(NULL,"Menu", "TextColour", c1); DBWriteContactSettingDword(NULL,"Menu", "SelTextColour", c2); DBWriteContactSettingDword(NULL,"FrameTitleBar", "TextColour", c3); DBWriteContactSettingDword(NULL,"StatusBar", "TextColour", c4); /* End of Text colors */ } pcli->pfnClcBroadcast( INTM_RELOADOPTIONS,0,0); NotifyEventHooks(ME_BACKGROUNDCONFIG_CHANGED,0,0); pcli->pfnClcBroadcast( INTM_INVALIDATE,0,0); RedrawWindow(GetParent(pcli->hwndContactTree),NULL,NULL,RDW_INVALIDATE|RDW_FRAME|RDW_ALLCHILDREN); } return 0; } break; } break; } }
// This seems pure front end LRESULT CALLBACK ChatProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { static SnapData sd; char buf[MSG_SIZ], mess[MSG_SIZ]; int partner = -1, i, x, y; static BOOL filterHasFocus[MAX_CHAT]; WORD wMask; HWND hMemo; for(i=0; i<MAX_CHAT; i++) if(hDlg == chatHandle[i]) { partner = i; break; } switch (message) { case WM_INITDIALOG: Translate(hDlg, DLG_Chat); if(partner<0) { for(i=0; i<MAX_CHAT; i++) if(chatHandle[i] == NULL) { partner = i; break; } chatHandle[partner] = hDlg; snprintf(buf, MSG_SIZ, T_("Chat Window %s"), ics_handle[0] ? ics_handle : first.tidy); SetWindowText(hDlg, buf); } for(i=0; i<MAX_CHAT; i++) if(chatHandle[i]) { if(i == partner) continue; // set our button in other open chats SetDlgItemText(chatHandle[i], IDC_Focus1+partner-(i<partner), chatPartner[partner]); EnableWindow( GetDlgItem(chatHandle[i], IDC_Focus1+partner-(i<partner)), 1 ); // and buttons for other chats in ours SetDlgItemText(hDlg, IDC_Focus1+i-(i>partner), chatPartner[i]); } else EnableWindow( GetDlgItem(hDlg, IDC_Focus1+i-(i>partner)), 0 ); for(i=0; i<MAX_CHAT-1; i++) { Button_SetStyle(GetDlgItem(hDlg, IDC_Focus1+i), BS_PUSHBUTTON|BS_LEFT, TRUE); } x = wpConsole.x; y = wpConsole.y; EnsureOnScreen(&x, &y, 0, 0); SetWindowPos(hDlg, NULL, x, y, 0, 0, SWP_NOZORDER|SWP_NOSIZE); SendMessage( GetDlgItem(hDlg, IDC_ChatPartner), // [HGM] clickbox: initialize with requested handle WM_SETTEXT, 0, (LPARAM) chatPartner[partner] ); filterHasFocus[partner] = TRUE; onTop = partner; // a newly opened box becomes top one if(chatPartner[partner][0]) { filterHasFocus[partner] = FALSE; SetFocus( GetDlgItem(hDlg, OPT_ChatInput) ); } hMemo = GetDlgItem(hDlg, IDC_ChatMemo); wMask = (WORD) SendMessage(hMemo, EM_GETEVENTMASK, 0, 0L); SendMessage(hMemo, EM_SETEVENTMASK, 0, wMask | ENM_LINK); SendMessage(hMemo, EM_AUTOURLDETECT, TRUE, 0L); chatInputWindowProc = (WNDPROC) // cloned from ConsoleWndProc(). Assume they all share same proc. SetWindowLongPtr(GetDlgItem(hDlg, OPT_ChatInput), GWLP_WNDPROC, (LONG_PTR) InterceptArrowKeys); return FALSE; case WM_NOTIFY: if (((NMHDR*)lParam)->code == EN_LINK) { ENLINK *pLink = (ENLINK*)lParam; if (pLink->msg == WM_LBUTTONUP) { TEXTRANGE tr; tr.chrg = pLink->chrg; tr.lpstrText = malloc(1+tr.chrg.cpMax-tr.chrg.cpMin); SendMessage( GetDlgItem(hDlg, IDC_ChatMemo), EM_GETTEXTRANGE, 0, (LPARAM)&tr); ShellExecute(NULL, "open", tr.lpstrText, NULL, NULL, SW_SHOW); free(tr.lpstrText); } } break; case WM_COMMAND: /* [AS] If <Enter> is pressed while editing the filter, it's better to apply the filter rather than selecting the current game. */ if( LOWORD(wParam) == IDC_ChatPartner ) { switch( HIWORD(wParam) ) { case EN_SETFOCUS: filterHasFocus[partner] = TRUE; break; case EN_KILLFOCUS: filterHasFocus[partner] = FALSE; break; } } if( filterHasFocus[partner] && (LOWORD(wParam) == IDC_Send) ) { SetFocus(GetDlgItem(hDlg, OPT_ChatInput)); wParam = IDC_Change; } /* [AS] End command replacement */ switch (LOWORD(wParam)) { case IDCANCEL: /* let Esc key switch focus back to console */ SetFocus(GetDlgItem(hwndConsole, OPT_ConsoleInput)); break; case IDC_Clear: SendMessage( GetDlgItem(hDlg, IDC_ChatMemo), WM_SETTEXT, 0, (LPARAM) "" ); break; case IDC_Change: GetDlgItemText(hDlg, IDC_ChatPartner, chatPartner[partner], MSG_SIZ); for(i=0; i<MAX_CHAT; i++) if(chatHandle[i] && i != partner) { // set our button in other open chats SetDlgItemText(chatHandle[i], IDC_Focus1+partner-(i<partner), chatPartner[partner]); } break; case IDC_Send: GetDlgItemText(hDlg, OPT_ChatInput, mess, MSG_SIZ); SetDlgItemText(hDlg, OPT_ChatInput, ""); // from here on it could be back-end SaveInHistory(mess); if(!strcmp("whispers", chatPartner[partner])) snprintf(buf, MSG_SIZ, "whisper %s\n", mess); // WHISPER box uses "whisper" to send else if(!strcmp("shouts", chatPartner[partner])) snprintf(buf, MSG_SIZ, "shout %s\n", mess); // SHOUT box uses "shout" to send else { if(!atoi(chatPartner[partner])) { snprintf(buf, MSG_SIZ, "> %s\r\n", mess); // echo only tells to handle, not channel InsertIntoMemo(hDlg, buf); snprintf(buf, MSG_SIZ, "xtell %s %s\n", chatPartner[partner], mess); } else snprintf(buf, MSG_SIZ, "tell %s %s\n", chatPartner[partner], mess); } SendToICS(buf); break; case IDC_Focus1: case IDC_Focus2: case IDC_Focus3: case IDC_Focus4: i = LOWORD(wParam) - IDC_Focus1; if(i >= partner) i++; onTop = i; SetFocus(GetDlgItem(hDlg, IDC_Send)); if(chatHandle[i]) { int j; for(j=0; j<MAX_CHAT; j++) if(i != j && chatHandle[j]) Button_SetState(GetDlgItem(chatHandle[j], IDC_Focus1+i-(j<i)), FALSE); SetFocus(GetDlgItem(chatHandle[i], OPT_ChatInput)); } break; default: break; } break; case WM_CLOSE: chatHandle[partner] = 0; chatPartner[partner][0] = 0; ChatPopDown(); for(i=0; i<MAX_CHAT; i++) if(chatHandle[i] && i != partner) { // set our button in other open chats SetDlgItemText(chatHandle[i], IDC_Focus1+partner-(i<partner), ""); EnableWindow( GetDlgItem(chatHandle[i], IDC_Focus1+partner-(i<partner)), 0 ); } EndDialog(hDlg, TRUE); break; case WM_SIZE: ResizeWindowControls( hDlg ); break; case WM_ENTERSIZEMOVE: return OnEnterSizeMove( &sd, hDlg, wParam, lParam ); case WM_SIZING: return OnSizing( &sd, hDlg, wParam, lParam ); case WM_MOVING: return OnMoving( &sd, hDlg, wParam, lParam ); case WM_EXITSIZEMOVE: return OnExitSizeMove( &sd, hDlg, wParam, lParam ); } return FALSE; }
int Docking_ProcessWindowMessage(WPARAM wParam,LPARAM lParam) { APPBARDATA abd; static int draggingTitle; MSG *msg=(MSG*)wParam; if(msg->message==WM_DESTROY) DBWriteContactSettingByte(NULL,"CList","Docked",(BYTE)docked); if(!docked && msg->message!=WM_CREATE && msg->message!=WM_MOVING && msg->message!=WM_CREATEDOCKED && msg->message != WM_MOVE && msg->message != WM_SIZE) return 0; switch(msg->message) { case WM_CREATE: //if(GetSystemMetrics(SM_CMONITORS)>1) return 0; if(DBGetContactSettingByte(NULL,"CList","Docked",0)) { PostMessage(msg->hwnd,WM_CREATEDOCKED,0,0); } draggingTitle=0; return 0; case WM_CREATEDOCKED: //we need to post a message just after creation to let main message function do some work docked=(int)(char)DBGetContactSettingByte(NULL,"CList","Docked",0); if(IsWindowVisible(msg->hwnd) && !IsIconic(msg->hwnd)) { RECT rc, rcMonitor; ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; abd.lParam=0; abd.uCallbackMessage=WM_DOCKCALLBACK; SHAppBarMessage(ABM_NEW,&abd); GetWindowRect(msg->hwnd,&rc); Docking_GetMonitorRectFromWindow(msg->hwnd,&rcMonitor); Docking_AdjustPosition(msg->hwnd,&rcMonitor,&rc); MoveWindow(msg->hwnd,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top,TRUE); dock_prevent_moving=0; OnMoving(msg->hwnd,&rc); dock_prevent_moving=1; ReposButtons(msg->hwnd,0,NULL); } break; case WM_CAPTURECHANGED: ReposButtons(msg->hwnd,0,NULL); return 0; case WM_ACTIVATE: ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; SHAppBarMessage(ABM_ACTIVATE,&abd); return 0; case WM_SIZE: ReposButtons(msg->hwnd,1,NULL); return 0; case WM_WINDOWPOSCHANGED: { if (docked) ReposButtons(msg->hwnd,0,NULL); return 0; ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; SHAppBarMessage(ABM_WINDOWPOSCHANGED,&abd); ReposButtons(msg->hwnd,0,NULL); return 0; } case WM_MOVING: { RECT rcMonitor; RECT rcWindow; RECT *rc; int dx=0; POINT ptCursor; if (docked) return 0; // stop early if(!(GetAsyncKeyState(VK_CONTROL)&0x8000)) return 0; // GetMessagePos() is no good, position is always unsigned GetCursorPos(&ptCursor); GetWindowRect(msg->hwnd,&rcWindow); dock_drag_dx=rcWindow.left-ptCursor.x; dock_drag_dy=rcWindow.top-ptCursor.y; Docking_GetMonitorRectFromPoint(ptCursor,&rcMonitor); if(((ptCursor.x<rcMonitor.left+EDGESENSITIVITY) || (ptCursor.x>=rcMonitor.right-EDGESENSITIVITY)) ) { ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; abd.lParam=0; abd.uCallbackMessage=WM_DOCKCALLBACK; SHAppBarMessage(ABM_NEW,&abd); if(ptCursor.x<rcMonitor.left+EDGESENSITIVITY) docked=DOCKED_LEFT; else docked=DOCKED_RIGHT; // TempDock=1; GetWindowRect(msg->hwnd,(LPRECT)msg->lParam); rc=(RECT*)msg->lParam; if (docked==DOCKED_RIGHT) dx=(rc->right>rcMonitor.right)?rc->right-rcMonitor.right:0; else dx=(rc->left<rcMonitor.left)?rc->left-rcMonitor.left:0; OffsetRect(rc,-dx,0); Docking_AdjustPosition(msg->hwnd,(LPRECT)&rcMonitor,(LPRECT)msg->lParam); SendMessage(msg->hwnd,WM_SIZE,0,0); dock_prevent_moving=0; OnMoving(msg->hwnd,(LPRECT)msg->lParam); dock_prevent_moving=1; mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); DBWriteContactSettingByte(NULL,"CList","Docked",(BYTE)docked); ReposButtons(msg->hwnd,0,NULL); return TRUE; } return 0; } case WM_EXITSIZEMOVE: { RECT rcMonitor; RECT rcWindow; if (TempDock) TempDock=0; GetWindowRect(msg->hwnd,&rcWindow); Docking_GetMonitorRectFromWindow(msg->hwnd,&rcMonitor); Docking_AdjustPosition(msg->hwnd,&rcMonitor,&rcWindow); *((LRESULT*)lParam)=TRUE; dock_prevent_moving=0; SetWindowPos(msg->hwnd,0,rcWindow.left,rcWindow.top,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOSENDCHANGING); OnMoving(msg->hwnd,&rcWindow); ReposButtons(msg->hwnd,0,NULL);//-=-=-= dock_prevent_moving=1; return 1; } case WM_MOVE: { if(docked && 0) { RECT rc, rcMonitor; Docking_GetMonitorRectFromWindow(msg->hwnd,&rcMonitor); GetWindowRect(msg->hwnd,&rc); Docking_AdjustPosition(msg->hwnd,&rcMonitor,&rc); MoveWindow(msg->hwnd,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top,TRUE); OnMoving(msg->hwnd,&rc); ReposButtons(msg->hwnd,0,NULL);//-=-=-= return 1; } ReposButtons(msg->hwnd,2,NULL); return 0; } case WM_SIZING: { /*RECT rcMonitor; Docking_GetMonitorRectFromWindow(msg->hwnd,&rcMonitor); Docking_AdjustPosition(msg->hwnd,&rcMonitor,(LPRECT)msg->lParam); *((LRESULT*)lParam)=TRUE; */ RECT rc; int dx=0, dy=0; int d=0; if (docked) ReposButtons(msg->hwnd,0,NULL); return FALSE; rc=*(RECT*)(msg->lParam); dock_prevent_moving=0; OnMoving(msg->hwnd,&rc); //-=-=-= return TRUE; } case WM_SHOWWINDOW: if(msg->lParam) return 0; if((msg->wParam && docked<0) || (!msg->wParam && docked>0)) docked=-docked; ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; if(msg->wParam) { RECT rc, rcMonitor; Docking_GetMonitorRectFromWindow(msg->hwnd,&rcMonitor); abd.lParam=0; abd.uCallbackMessage=WM_DOCKCALLBACK; SHAppBarMessage(ABM_NEW,&abd); GetWindowRect(msg->hwnd,&rc); Docking_AdjustPosition(msg->hwnd,&rcMonitor,&rc); MoveWindow(msg->hwnd,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top,FALSE); OnMoving(msg->hwnd,&rc); ReposButtons(msg->hwnd,0,NULL);//-=-=-= } else { SHAppBarMessage(ABM_REMOVE,&abd); } return 0; case WM_NCHITTEST: { LONG result; result=DefWindowProc(msg->hwnd,WM_NCHITTEST,msg->wParam,msg->lParam); if(result==HTSIZE || result==HTTOP || result==HTTOPLEFT || result==HTTOPRIGHT || result==HTBOTTOM || result==HTBOTTOMRIGHT || result==HTBOTTOMLEFT) {*((LRESULT*)lParam)=HTCLIENT; return TRUE;} if(docked==DOCKED_LEFT && result==HTLEFT) {*((LRESULT*)lParam)=HTCLIENT; return TRUE;} if(docked==DOCKED_RIGHT && result==HTRIGHT) {*((LRESULT*)lParam)=HTCLIENT; return TRUE;} return 0; } case WM_SYSCOMMAND: if((msg->wParam&0xFFF0)!=SC_MOVE) return 0; SetActiveWindow(msg->hwnd); SetCapture(msg->hwnd); draggingTitle=1; *((LRESULT*)lParam)=0; return TRUE; case WM_MOUSEMOVE: if(!draggingTitle) return 0; { RECT rc; POINT pt; GetClientRect(msg->hwnd,&rc); if(((docked==DOCKED_LEFT || docked==-DOCKED_LEFT) && (short)LOWORD(msg->lParam)>rc.right) || ((docked==DOCKED_RIGHT || docked==-DOCKED_RIGHT) && (short)LOWORD(msg->lParam)<0)) { ReleaseCapture(); draggingTitle=0; ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; SHAppBarMessage(ABM_REMOVE,&abd); docked=0; GetCursorPos(&pt); PostMessage(msg->hwnd,WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(pt.x,pt.y)); SetWindowPos(msg->hwnd,0,pt.x-rc.right/2,pt.y-GetSystemMetrics(SM_CYFRAME)-GetSystemMetrics(SM_CYSMCAPTION)/2,DBGetContactSettingDword(NULL,"CList","Width",0),DBGetContactSettingDword(NULL,"CList","Height",0),SWP_NOZORDER); DBWriteContactSettingByte(NULL,"CList","Docked",(BYTE)docked); // ReposButtons(msg->hwnd,0); } return 1; } case WM_LBUTTONUP: if(draggingTitle) { ReleaseCapture(); draggingTitle=0; } return 0; case WM_DOCKCALLBACK: switch(msg->wParam) { case ABN_WINDOWARRANGE: ShowWindowNew(msg->hwnd,msg->lParam?SW_HIDE:SW_SHOW); { RECT rc, rcMonitor; Docking_GetMonitorRectFromWindow(msg->hwnd,&rcMonitor); GetWindowRect(msg->hwnd,&rc); Docking_AdjustPosition(msg->hwnd,&rcMonitor,&rc); OnMoving(msg->hwnd,&rc); //-=-=-= ReposButtons(msg->hwnd,0,NULL); dock_prevent_moving=1; } break; } return TRUE; case WM_DESTROY: if(docked>0) { ZeroMemory(&abd,sizeof(abd)); abd.cbSize=sizeof(abd); abd.hWnd=msg->hwnd; SHAppBarMessage(ABM_REMOVE,&abd); ReposButtons(msg->hwnd,0,NULL); } return 0; } return 0; }
void wxAuiFloatingFrame::OnMoveEvent(wxMoveEvent& event) { if (!m_solid_drag) { // systems without solid window dragging need to be // handled slightly differently, due to the lack of // the constant stream of EVT_MOVING events if (!isMouseDown()) return; OnMoveStart(); OnMoving(event.GetRect(), wxNORTH); m_moving = true; return; } wxRect win_rect = GetRect(); if (win_rect == m_last_rect) return; // skip the first move event if (m_last_rect.IsEmpty()) { m_last_rect = win_rect; return; } // skip if moving too fast to avoid massive redraws and // jumping hint windows if ((abs(win_rect.x - m_last_rect.x) > 3) || (abs(win_rect.y - m_last_rect.y) > 3)) { m_last3_rect = m_last2_rect; m_last2_rect = m_last_rect; m_last_rect = win_rect; return; } // prevent frame redocking during resize if (m_last_rect.GetSize() != win_rect.GetSize()) { m_last3_rect = m_last2_rect; m_last2_rect = m_last_rect; m_last_rect = win_rect; return; } wxDirection dir = wxALL; int horiz_dist = abs(win_rect.x - m_last3_rect.x); int vert_dist = abs(win_rect.y - m_last3_rect.y); if (vert_dist >= horiz_dist) { if (win_rect.y < m_last3_rect.y) dir = wxNORTH; else dir = wxSOUTH; } else { if (win_rect.x < m_last3_rect.x) dir = wxWEST; else dir = wxEAST; } m_last3_rect = m_last2_rect; m_last2_rect = m_last_rect; m_last_rect = win_rect; if (!isMouseDown()) return; if (!m_moving) { OnMoveStart(); m_moving = true; } if (m_last3_rect.IsEmpty()) return; OnMoving(event.GetRect(), dir); }
// Note: Once the eval graph is opened, this window-proc lives forever; een closing the // eval-graph window merely hides it. On opening we re-initialize it, though, so it could // as well hae been destroyed. While it is open it processes the REFRESH_GRAPH commands. LRESULT CALLBACK EvalGraphProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { static SnapData sd; PAINTSTRUCT stPS; HDC hDC; switch (message) { case WM_INITDIALOG: Translate(hDlg, DLG_EvalGraph); if( evalGraphDialog == NULL ) { evalGraphDialog = hDlg; RestoreWindowPlacement( hDlg, &wpEvalGraph ); /* Restore window placement */ } return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; default: break; } break; case WM_ERASEBKGND: return TRUE; case WM_PAINT: hDC = BeginPaint( hDlg, &stPS ); DisplayEvalGraph( hDlg, hDC ); EndPaint( hDlg, &stPS ); break; case WM_REFRESH_GRAPH: hDC = GetDC( hDlg ); DisplayEvalGraph( hDlg, hDC ); ReleaseDC( hDlg, hDC ); break; case WM_LBUTTONDOWN: if( wParam == 0 || wParam == MK_LBUTTON ) { int index = GetMoveIndexFromPoint( LOWORD(lParam), HIWORD(lParam) ); if( index >= 0 && index < currLast ) { ToNrEvent( index + 1 ); } } return TRUE; case WM_SIZE: InvalidateRect( hDlg, NULL, FALSE ); break; case WM_GETMINMAXINFO: { MINMAXINFO * mmi = (MINMAXINFO *) lParam; mmi->ptMinTrackSize.x = 100; mmi->ptMinTrackSize.y = 100; } break; /* Support for captionless window */ case WM_CLOSE: EvalGraphPopDown(); break; case WM_ENTERSIZEMOVE: return OnEnterSizeMove( &sd, hDlg, wParam, lParam ); case WM_SIZING: return OnSizing( &sd, hDlg, wParam, lParam ); case WM_MOVING: return OnMoving( &sd, hDlg, wParam, lParam ); case WM_EXITSIZEMOVE: return OnExitSizeMove( &sd, hDlg, wParam, lParam ); } return FALSE; }
void wxAuiFloatingFrame::OnMoveEvent(wxMoveEvent& event) { if (!m_solidDrag) { // systems without solid window dragging need to be // handled slightly differently, due to the lack of // the constant stream of EVT_MOVING events if (!isMouseDown()) return; OnMoveStart(); OnMoving(event.GetRect(), wxNORTH); m_moving = true; return; } wxRect winRect = GetRect(); if (winRect == m_lastRect) return; // skip the first move event if (m_lastRect.IsEmpty()) { m_lastRect = winRect; return; } // as on OSX moving windows are not getting all move events, only sporadically, this difference // is almost always big on OSX, so avoid this early exit opportunity #ifndef __WXOSX__ // skip if moving too fast to avoid massive redraws and // jumping hint windows if ((abs(winRect.x - m_lastRect.x) > 3) || (abs(winRect.y - m_lastRect.y) > 3)) { m_last3Rect = m_last2Rect; m_last2Rect = m_lastRect; m_lastRect = winRect; // However still update the internally stored position to avoid // snapping back to the old one later. if (m_ownerMgr) { m_ownerMgr->GetPane(m_paneWindow). floating_pos = winRect.GetPosition(); } return; } #endif // prevent frame redocking during resize if (m_lastRect.GetSize() != winRect.GetSize()) { m_last3Rect = m_last2Rect; m_last2Rect = m_lastRect; m_lastRect = winRect; return; } wxDirection dir = wxALL; int horiz_dist = abs(winRect.x - m_last3Rect.x); int vert_dist = abs(winRect.y - m_last3Rect.y); if (vert_dist >= horiz_dist) { if (winRect.y < m_last3Rect.y) dir = wxNORTH; else dir = wxSOUTH; } else { if (winRect.x < m_last3Rect.x) dir = wxWEST; else dir = wxEAST; } m_last3Rect = m_last2Rect; m_last2Rect = m_lastRect; m_lastRect = winRect; if (!isMouseDown()) return; if (!m_moving) { OnMoveStart(); m_moving = true; } if (m_last3Rect.IsEmpty()) return; if ( event.GetEventType() == wxEVT_MOVING ) OnMoving(event.GetRect(), dir); else OnMoving(wxRect(event.GetPosition(),GetSize()), dir); }
// This seems pure front end LRESULT CALLBACK EngineOutputProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { static SnapData sd; switch (message) { case WM_INITDIALOG: if( engineOutputDialog == NULL ) { engineOutputDialog = hDlg; Translate(hDlg, DLG_EngineOutput); RestoreWindowPlacement( hDlg, &wpEngineOutput ); /* Restore window placement */ ResizeWindowControls( windowMode ); SendDlgItemMessage( hDlg, IDC_EngineMemo1, EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS ); SendDlgItemMessage( hDlg, IDC_EngineMemo2, EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS ); /* Set font */ SendDlgItemMessage( engineOutputDialog, IDC_EngineMemo1, WM_SETFONT, (WPARAM)font[boardSize][MOVEHISTORY_FONT]->hf, MAKELPARAM(TRUE, 0 )); SendDlgItemMessage( engineOutputDialog, IDC_EngineMemo2, WM_SETFONT, (WPARAM)font[boardSize][MOVEHISTORY_FONT]->hf, MAKELPARAM(TRUE, 0 )); SetEngineState( 0, STATE_IDLE, "" ); SetEngineState( 1, STATE_IDLE, "" ); } return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; default: break; } break; case WM_MOUSEMOVE: MovePV(LOWORD(lParam) - boardRect.left, HIWORD(lParam) - boardRect.top, boardRect.bottom - boardRect.top); break; case WM_RBUTTONUP: ReleaseCapture(); SendMessage( outputField[currentPV][nMemo], EM_SETSEL, 0, 0 ); highTextStart[currentPV] = highTextEnd[currentPV] = 0; UnLoadPV(); break; case WM_NOTIFY: if( wParam == IDC_EngineMemo1 || wParam == IDC_EngineMemo2 ) { MSGFILTER * lpMF = (MSGFILTER *) lParam; if( lpMF->msg == WM_RBUTTONDOWN && (lpMF->wParam & (MK_CONTROL | MK_SHIFT)) == 0 ) { currentPV = (wParam == IDC_EngineMemo2); GetMemoLine(hDlg, LOWORD(lpMF->lParam), HIWORD(lpMF->lParam)); } } break; case WM_GETMINMAXINFO: { MINMAXINFO * mmi = (MINMAXINFO *) lParam; mmi->ptMinTrackSize.x = 100; mmi->ptMinTrackSize.y = 160; } break; case WM_CLOSE: EngineOutputPopDown(); break; case WM_SIZE: ResizeWindowControls( windowMode ); break; case WM_ENTERSIZEMOVE: return OnEnterSizeMove( &sd, hDlg, wParam, lParam ); case WM_SIZING: return OnSizing( &sd, hDlg, wParam, lParam ); case WM_MOVING: return OnMoving( &sd, hDlg, wParam, lParam ); case WM_EXITSIZEMOVE: return OnExitSizeMove( &sd, hDlg, wParam, lParam ); } return FALSE; }