LRESULT __cdecl CWhatsUpDummyServer::ParentWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { switch ( iMessage ) { case WM_GM_CONNECT_SERVER_MSG: switch ( lParam & 0xFFFF & 0xFFFF ) { case FD_ACCEPT: { sockaddr_in sockinfo; int isockinfolen=16; SOCKET sckTemp; int iRetVal; sckTemp = accept(wParam & 0xFFFF & 0xFFFF, (sockaddr *)&sockinfo, &isockinfolen); if ( sckTemp == INVALID_SOCKET ) return FALSE; iRetVal = WSAAsyncSelect(sckTemp, hWnd, WM_GM_CONNECT_SERVER_MSG, FD_READ|FD_CLOSE); if ( iRetVal == -1 ) { closesocket(sckTemp); } return FALSE; } break; case FD_READ: { char cBUFFER[256]; int iRecvBytes = recv(wParam & 0xFFFF & 0xFFFF, cBUFFER, sizeof(cBUFFER), 0); if ( iRecvBytes <= 0 ) { closesocket(wParam & 0xFFFF & 0xFFFF); } return FALSE; } break; case FD_CLOSE: closesocket(wParam & 0xFFFF & 0xFFFF); return FALSE; default: return FALSE; } break; default: #ifdef _WIN64 return CallWindowProcA((WNDPROC)CWhatsUpDummyServer::m_lpOldProc, hWnd, iMessage, wParam, lParam); #else return CallWindowProcA(CWhatsUpDummyServer::m_lpOldProc, hWnd, iMessage, wParam, lParam); #endif } }
static LRESULT CALLBACK parent_wnd_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { case WM_COMMAND: switch (wparam) { case MAKEWPARAM(COMBO_ID, CBN_SELCHANGE): { HWND hCombo = (HWND)lparam; int idx; char list[20], edit[20]; memset(list, 0, sizeof(list)); memset(edit, 0, sizeof(edit)); idx = SendMessageA(hCombo, CB_GETCURSEL, 0, 0); SendMessageA(hCombo, CB_GETLBTEXT, idx, (LPARAM)list); SendMessageA(hCombo, WM_GETTEXT, sizeof(edit), (LPARAM)edit); ok(!strcmp(edit, expected_edit_text), "edit: got %s, expected %s\n", edit, expected_edit_text); ok(!strcmp(list, expected_list_text), "list: got %s, expected %s\n", list, expected_list_text); selchange_fired = TRUE; } break; } break; } return CallWindowProcA(old_parent_proc, hwnd, msg, wparam, lparam); }
static LRESULT WINAPI tabSubclassProcess(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA); static long defwndproc_counter = 0; LRESULT ret; struct message msg; /* do not log painting messages */ if (message != WM_PAINT && message != WM_ERASEBKGND && message != WM_NCPAINT && message != WM_NCHITTEST && message != WM_GETTEXT && message != WM_GETICON && message != WM_DEVICECHANGE) { trace("tab: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam); msg.message = message; msg.flags = sent|wparam|lparam; if (defwndproc_counter) msg.flags |= defwinproc; msg.wParam = wParam; msg.lParam = lParam; add_message(sequences, TAB_SEQ_INDEX, &msg); } defwndproc_counter++; ret = CallWindowProcA(info->oldproc, hwnd, message, wParam, lParam); defwndproc_counter--; return ret; }
static LRESULT CALLBACK wined3d_wndproc(HWND window, UINT message, WPARAM wparam, LPARAM lparam) { struct wined3d_wndproc *entry; struct wined3d_device *device; BOOL unicode; WNDPROC proc; wined3d_wndproc_mutex_lock(); entry = wined3d_find_wndproc(window); if (!entry) { wined3d_wndproc_mutex_unlock(); ERR("Window %p is not registered with wined3d.\n", window); return DefWindowProcW(window, message, wparam, lparam); } device = entry->device; unicode = entry->unicode; proc = entry->proc; wined3d_wndproc_mutex_unlock(); if (device) return device_process_message(device, window, unicode, message, wparam, lparam, proc); if (unicode) return CallWindowProcW(proc, window, message, wparam, lparam); return CallWindowProcA(proc, window, message, wparam, lparam); }
static LRESULT WINAPI editbox_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { WNDPROC oldproc = (WNDPROC)GetWindowLongPtrA(hwnd, GWLP_USERDATA); static LONG defwndproc_counter = 0; LRESULT ret; struct message msg; msg.message = message; msg.flags = sent|wparam|lparam; if (defwndproc_counter) msg.flags |= defwinproc; msg.wParam = wParam; msg.lParam = lParam; msg.id = EDITBOX_ID; if (message != WM_PAINT && message != WM_ERASEBKGND && message != WM_NCPAINT && message != WM_NCHITTEST && message != WM_GETTEXT && message != WM_GETICON && message != WM_DEVICECHANGE) { add_message(sequences, EDITBOX_SEQ_INDEX, &msg); } defwndproc_counter++; ret = CallWindowProcA(oldproc, hwnd, message, wParam, lParam); defwndproc_counter--; return ret; }
/*********************************************************************** * ColorDlgProc32 [internal] * */ static INT_PTR CALLBACK ColorDlgProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { int res; LPCCPRIV lpp = GetPropW( hDlg, szColourDialogProp ); if (message != WM_INITDIALOG) { if (!lpp) return FALSE; res = 0; if (CC_HookCallChk(lpp->lpcc)) res = CallWindowProcA( (WNDPROC)lpp->lpcc->lpfnHook, hDlg, message, wParam, lParam); if ( res ) return res; } /* FIXME: SetRGB message if (message && message == msetrgb) return HandleSetRGB(hDlg, lParam); */ switch (message) { case WM_INITDIALOG: return CC_WMInitDialog(hDlg, wParam, lParam); case WM_NCDESTROY: DeleteDC(lpp->hdcMem); DeleteObject(lpp->hbmMem); HeapFree(GetProcessHeap(), 0, lpp); RemovePropW( hDlg, szColourDialogProp ); break; case WM_COMMAND: if (CC_WMCommand( hDlg, wParam, lParam, HIWORD(wParam), (HWND) lParam)) return TRUE; break; case WM_PAINT: if (CC_WMPaint(hDlg)) return TRUE; break; case WM_LBUTTONDBLCLK: if (CC_MouseCheckResultWindow(hDlg, lParam)) return TRUE; break; case WM_MOUSEMOVE: if (CC_WMMouseMove(hDlg, lParam)) return TRUE; break; case WM_LBUTTONUP: /* FIXME: ClipCursor off (if in color graph)*/ if (CC_WMLButtonUp(hDlg)) return TRUE; break; case WM_LBUTTONDOWN:/* FIXME: ClipCursor on (if in color graph)*/ if (CC_WMLButtonDown(hDlg, lParam)) return TRUE; break; } return FALSE ; }
DWORD Window::OriginalWndProc( UINT message, WPARAM wParam, LPARAM lParam ) { return CallWindowProcA(m_pfnWndProc, m_hwnd, message, wParam, lParam); }
static LRESULT WINAPI ownerdraw_test_wndproc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { LRESULT ret; if (msg == WM_DRAWITEM) g_wmdrawitm_ctr++; ret = CallWindowProcA(g_wndproc_saved, hwnd, msg, wParam, lParam); return ret; }
LRESULT CALLBACK AnsiSubclassProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { LRESULT Result; switch(msg) { case WM_GETTEXT: printf("AnsiSubclassProc calling SavedWindowProcA\n"); Result = CallWindowProcA(SavedWndProcA, hWnd, msg, wParam, lParam); printf("AnsiSubclassProc Ansi window text \"%s\"\n", (LPSTR) lParam); break; default: Result = CallWindowProcA(SavedWndProcA, hWnd, msg, wParam, lParam); break; } return Result; }
LRESULT CALLBACK StaticHookProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_NCHITTEST: return HTCLIENT; } WNDPROC pOldProc=(WNDPROC)GetPropA(hwnd,"OriginalStaticProc"); if (pOldProc) CallWindowProcA(pOldProc,hwnd,uMsg,wParam,lParam); return DefWindowProcA(hwnd,uMsg,wParam,lParam); }
LRESULT CALLBACK CMVS_MainWindowProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch (Message) { case WM_DROPFILES: DropFiles(hWnd, (HDROP)wParam); return 0; } return CallWindowProcA(OrigWndProc, hWnd, Message, wParam, lParam); }
static LRESULT CALLBACK progress_subclass_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { if (msg == WM_PAINT) { GetUpdateRect(hWnd, &last_paint_rect, FALSE); } else if (msg == WM_ERASEBKGND) { erased = TRUE; } return CallWindowProcA(progress_wndproc, hWnd, msg, wParam, lParam); }
static LRESULT WINAPI pager_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { WNDPROC oldproc = (WNDPROC)GetWindowLongPtrA(hwnd, GWLP_USERDATA); struct message msg = { 0 }; msg.message = message; msg.flags = sent|wparam|lparam; msg.wParam = wParam; msg.lParam = lParam; add_message(sequences, PAGER_SEQ_INDEX, &msg); return CallWindowProcA(oldproc, hwnd, message, wParam, lParam); }
static LRESULT WINAPI create_test_wndproc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { LRESULT ret; if (msg == WM_CREATE) { CREATESTRUCTA *cs = (CREATESTRUCTA *)lParam; ret = CallWindowProcA(g_status_wndproc, hwnd, msg, wParam, lParam); GetWindowRect(hwnd, &g_rcCreated); MapWindowPoints(HWND_DESKTOP, g_hMainWnd, (LPPOINT)&g_rcCreated, 2); ok(cs->x == g_rcCreated.left, "CREATESTRUCT.x modified\n"); ok(cs->y == g_rcCreated.top, "CREATESTRUCT.y modified\n"); } else if (msg == WM_SIZE) { g_wmsize_count++; ret = CallWindowProcA(g_status_wndproc, hwnd, msg, wParam, lParam); } else ret = CallWindowProcA(g_status_wndproc, hwnd, msg, wParam, lParam); return ret; }
static LRESULT CallParentWndProc(WNDPROC pfnParentWndProc, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { LRESULT rc; if (!pfnParentWndProc) pfnParentWndProc = GetPickerInfo(hWnd)->pfnParentWndProc; if (IsWindowUnicode(hWnd)) rc = CallWindowProcW(pfnParentWndProc, hWnd, message, wParam, lParam); else rc = CallWindowProcA(pfnParentWndProc, hWnd, message, wParam, lParam); return rc; }
static LRESULT WINAPI MCIWndProc16(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { case MCIWNDM_SENDSTRINGA: case MCIWNDM_SETTIMEFORMATA: lparam = (ULONG_PTR)MapSL(lparam); break; default: break; } return CallWindowProcA(pMCIWndProc, hwnd, msg, wparam, lparam); }
LRESULT SLIDER::SubTrack(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ char Buf[200]; Buf[0]=0; switch(uMsg){ case WM_SETCURSOR: UINT MouseMsg=HIWORD(lParam); if(MouseMsg==WM_MOUSEMOVE){//we're moving the cursor; adjust accordingly. SLIDER::sti.Slider->Moving(); return 0; } if(MouseMsg==WM_RBUTTONDOWN || MouseMsg==WM_LBUTTONUP){ SLIDER::sti.Slider->EndTracking(); return 0; } break; } return CallWindowProcA(SLIDER::sti.OldProc, hwnd, uMsg, wParam, lParam); }
static LRESULT WINAPI monthcal_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA); static long defwndproc_counter = 0; LRESULT ret; struct message msg; msg.message = message; msg.flags = sent|wparam|lparam; if (defwndproc_counter) msg.flags |= defwinproc; msg.wParam = wParam; msg.lParam = lParam; add_message(sequences, MONTHCAL_SEQ_INDEX, &msg); defwndproc_counter++; ret = CallWindowProcA(info->oldproc, hwnd, message, wParam, lParam); defwndproc_counter--; return ret; }
LONG WINAPI Input::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { COPYDATASTRUCT* pCopy; switch (uMsg) { case WM_COPYDATA: pCopy = (COPYDATASTRUCT*)lParam; if (pCopy) { if (pCopy->dwData == 0x0000) { //TODO : Add code } } return TRUE; } return (LONG)CallWindowProcA(Vars.oldWNDPROC, hWnd, uMsg, wParam, lParam); }
static LRESULT WINAPI trackbar_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ WNDPROC oldproc = (WNDPROC)GetWindowLongPtrA(hwnd, GWLP_USERDATA); static LONG defwndproc_counter = 0; LRESULT ret; struct message msg; msg.message = message; msg.flags = sent|wparam|lparam; if (defwndproc_counter) msg.flags |= defwinproc; msg.wParam = wParam; msg.lParam = lParam; msg.id = 0; add_message(sequences, TRACKBAR_SEQ_INDEX, &msg); defwndproc_counter++; ret = CallWindowProcA(oldproc, hwnd, message, wParam, lParam); defwndproc_counter--; return ret; }
static LRESULT CALLBACK DevView_EditWndProc(HWND hwndEdit, UINT nMessage, WPARAM wParam, LPARAM lParam) { struct DevViewInfo *pDevViewInfo; struct DevViewEntry *pEnt; LRESULT rc; HWND hwndDevView; LONG_PTR l; l = GetWindowLongPtr(hwndEdit, GWLP_USERDATA); pEnt = (struct DevViewEntry *) l; if (IsWindowUnicode(hwndEdit)) rc = CallWindowProcW(pEnt->pfnEditWndProc, hwndEdit, nMessage, wParam, lParam); else rc = CallWindowProcA(pEnt->pfnEditWndProc, hwndEdit, nMessage, wParam, lParam); if (nMessage == WM_SETTEXT) { hwndDevView = GetParent(hwndEdit); pDevViewInfo = GetDevViewInfo(hwndDevView); DevView_TextChanged(hwndDevView, pEnt - pDevViewInfo->pEntries, (LPCTSTR) lParam); } return rc; }
// // The subclassed COMBOLBOX message handler // extern "C" LRESULT FAR PASCAL ComboBoxListBoxProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { switch (nMsg) { case WM_RBUTTONDOWN: { // If you want to select all/unselect all using the // right button, remove this ifdef. Personally, I don't really like it #if FALSE if (m_pComboBox != 0) { INT nCount = m_pComboBox->GetCount(); INT nSelCount = 0; for (INT i = 0; i < nCount; i++) { if (m_pComboBox->GetCheck(i)) nSelCount++; } m_pComboBox->SelectAll(nSelCount != nCount); // Make sure to invalidate this window as well InvalidateRect(hWnd, 0, FALSE); m_pComboBox->GetParent()->SendMessage(WM_COMMAND, MAKELONG(GetWindowLong(m_pComboBox->m_hWnd, GWL_ID), CBN_SELCHANGE), (LPARAM)m_pComboBox->m_hWnd); } #endif break; } // Make the combobox always return -1 as the current selection. This // causes the lpDrawItemStruct->itemID in DrawItem() to be -1 // when the always-visible-portion of the combo is drawn case LB_GETCURSEL: { return -1; } case WM_CHAR: { if (wParam == VK_SPACE) { // Get the current selection INT nIndex = CallWindowProcA(m_pWndProc, hWnd, LB_GETCURSEL, wParam, lParam); CRect rcItem; SendMessage(hWnd, LB_GETITEMRECT, nIndex, (LONG)(VOID *)&rcItem); InvalidateRect(hWnd, rcItem, FALSE); // Invert the check mark m_pComboBox->SetCheck(nIndex, !m_pComboBox->GetCheck(nIndex)); // Notify that selection has changed m_pComboBox->GetParent()->SendMessage(WM_COMMAND, MAKELONG(GetWindowLong(m_pComboBox->m_hWnd, GWL_ID), CBN_SELCHANGE), (LPARAM)m_pComboBox->m_hWnd); return 0; } break; } case WM_LBUTTONDOWN: { CRect rcClient; GetClientRect(hWnd, rcClient); CPoint pt; pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); if (PtInRect(rcClient, pt)) { INT nItemHeight = SendMessage(hWnd, LB_GETITEMHEIGHT, 0, 0); INT nTopIndex = SendMessage(hWnd, LB_GETTOPINDEX, 0, 0); // Compute which index to check/uncheck INT nIndex = nTopIndex + pt.y / nItemHeight; CRect rcItem; SendMessage(hWnd, LB_GETITEMRECT, nIndex, (LONG)(VOID *)&rcItem); if (PtInRect(rcItem, pt)) { // Invalidate this window InvalidateRect(hWnd, rcItem, FALSE); m_pComboBox->SetCheck(nIndex, !m_pComboBox->GetCheck(nIndex)); // Notify that selection has changed m_pComboBox->GetParent()->SendMessage(WM_COMMAND, MAKELONG(GetWindowLong(m_pComboBox->m_hWnd, GWL_ID), CBN_SELCHANGE), (LPARAM)m_pComboBox->m_hWnd); } } // Do the default handling now (such as close the popup // window when clicked outside) break; } case WM_LBUTTONUP: { // Don't do anything here. This causes the combobox popup // windows to remain open after a selection has been made return 0; } } return CallWindowProc(m_pWndProc, hWnd, nMsg, wParam, lParam); }
/** * 功能: * 用于处理下拉列表的消息的回调函数. * 参数: * (略) * 返回值: * (略) **/ extern "C" LRESULT FAR PASCAL ComboBoxListBoxProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { switch (nMsg) { case WM_RBUTTONDOWN: { break; } case LB_GETCURSEL: { return m_pComboBox->GetCurSel(); break; } case WM_CHAR: { if (wParam == VK_SPACE) //如果用户按下空格键如何处理 { INT nIndex = CallWindowProcA(m_pWndProc, hWnd, LB_GETCURSEL, wParam, lParam); CRect rcItem; SendMessage(hWnd, LB_GETITEMRECT, nIndex, (LONG)(VOID *)&rcItem); InvalidateRect(hWnd, rcItem, FALSE); //m_pComboBox->SetCheck(nIndex, !m_pComboBox->GetCheck(nIndex)); m_pComboBox->GetParent()->SendMessage(WM_COMMAND, MAKELONG(GetWindowLong(m_pComboBox->m_hWnd, GWL_ID), CBN_SELCHANGE), (LPARAM)m_pComboBox->m_hWnd); return 0; } break; } case WM_LBUTTONDOWN: { CRect rcClient; GetClientRect(hWnd, rcClient); CPoint pt; pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); if (PtInRect(rcClient, pt)) { //获取一行的高度 INT nItemHeight = SendMessage(hWnd, LB_GETITEMHEIGHT, 0, 0); //获取最顶部的索引 INT nTopIndex = SendMessage(hWnd, LB_GETTOPINDEX, 0, 0); //算出当前索引 INT nIndex = nTopIndex + pt.y / nItemHeight; //获取该行的范围 CRect rcItem; SendMessage(hWnd, LB_GETITEMRECT, nIndex, (LONG)(VOID *)&rcItem); CString strText; m_pComboBox->GetLBText(nIndex,strText); if(strText == "-")//这里响应日期上滚的消息 { m_pComboBox->BeginRollBack(); return 0; } if(strText == "+") { m_pComboBox->BeginRollToFuture(); return 0; } } break; } case WM_LBUTTONUP: { //以下代码是用于禁止退出上下两个菜单的 //一般CComboBox弹出的列表只要一点就会 //消失,在这里拦截他的消息,让其不消失. CRect rcClient; GetClientRect(hWnd, rcClient); CPoint pt; pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); if (PtInRect(rcClient, pt)) { //获取一行的高度 INT nItemHeight = SendMessage(hWnd, LB_GETITEMHEIGHT, 0, 0); //获取最顶部的索引 INT nTopIndex = SendMessage(hWnd, LB_GETTOPINDEX, 0, 0); //算出当前索引 INT nIndex = nTopIndex + pt.y / nItemHeight; //获取该行的范围 CRect rcItem; SendMessage(hWnd, LB_GETITEMRECT, nIndex, (LONG)(VOID *)&rcItem); CString strText; m_pComboBox->GetLBText(nIndex,strText); if(strText == "-" || strText == "+") { m_pComboBox->StopRoll(); return 0; } m_pComboBox->SetCurSel(nIndex); //DWORD year = atoi(strText); //m_pComboBox->GetParent()->SendMessage(UM_YEAR_SELCHANGE,year); } } } return CallWindowProc(m_pWndProc, hWnd, nMsg, wParam, lParam); }
extern "C" static LRESULT FAR PASCAL ComboBoxCheckProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { switch (nMsg) { case WM_CHAR: { if (wParam == VK_SPACE) { INT nIndex = CallWindowProcA(_pWndProc, hWnd, LB_GETCURSEL, wParam, lParam); CRect rec; SendMessage(hWnd, LB_GETITEMRECT, nIndex, (LONG)(LPVOID) &rec); ::InvalidateRect(hWnd, rec, FALSE); _pComboBoxCheck->SetCheck(nIndex, !_pComboBoxCheck->GetCheck(nIndex)); _pComboBoxCheck->GetParent()->SendMessage(WM_COMMAND, MAKELONG(GetWindowLong(_pComboBoxCheck->m_hWnd, GWL_ID), CBN_SELCHANGE), (LPARAM)_pComboBoxCheck->m_hWnd); return 0; } break; } case WM_RBUTTONDOWN: { if (_pComboBoxCheck != NULL) { INT nCount = _pComboBoxCheck->GetCount(); INT nSelectCount = 0; for (INT i = 0; i < nCount; i++) if (_pComboBoxCheck->GetCheck(i)) nSelectCount++; ::InvalidateRect(hWnd, 0, FALSE); _pComboBoxCheck->SelectAll(FALSE/*nSelectCount != nCount*/); _pComboBoxCheck->GetParent()->SendMessage(WM_COMMAND, MAKELONG(GetWindowLong(_pComboBoxCheck->m_hWnd, GWL_ID), CBN_SELCHANGE), (LPARAM) _pComboBoxCheck->m_hWnd); } } break; case WM_LBUTTONUP: return 0; case WM_LBUTTONDOWN: { CRect recClient; GetClientRect(hWnd, recClient); CPoint pt; pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); if (PtInRect(recClient, pt)) { INT nHeight = SendMessage(hWnd, LB_GETITEMHEIGHT, 0, 0); INT nTopIndex = SendMessage(hWnd, LB_GETTOPINDEX, 0, 0); INT nIndex = nTopIndex + pt.y / nHeight; CRect rec; SendMessage(hWnd, LB_GETITEMRECT, nIndex, (LONG)(LPVOID) &rec); if (PtInRect(rec, pt)) { ::InvalidateRect(hWnd, rec, FALSE); _pComboBoxCheck->SetCheck(nIndex, !_pComboBoxCheck->GetCheck(nIndex)); _pComboBoxCheck->GetParent()->SendMessage(WM_COMMAND, MAKELONG(GetWindowLong(_pComboBoxCheck->m_hWnd, GWL_ID), CBN_SELCHANGE), (LPARAM)_pComboBoxCheck->m_hWnd); } } } break; case LB_GETCURSEL: return -1; } return CallWindowProc(_pWndProc, hWnd, nMsg, wParam, lParam); }
static LRESULT CALLBACK sheet_callback_messages_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { save_message(hwnd, msg, wParam, lParam, RECEIVER_SHEET_WINPROC); return CallWindowProcA(oldWndProc, hwnd, msg, wParam, lParam); }
/*********************************************************************** * CC_WMInitDialog [internal] */ static LRESULT CC_WMInitDialog( HWND hDlg, WPARAM wParam, LPARAM lParam ) { int i, res; int r, g, b; HWND hwnd; RECT rect; POINT point; LPCCPRIV lpp; TRACE("WM_INITDIALOG lParam=%08lX\n", lParam); lpp = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct CCPRIVATE) ); lpp->lpcc = (LPCHOOSECOLORW) lParam; if (lpp->lpcc->lStructSize != sizeof(CHOOSECOLORW) ) { HeapFree(GetProcessHeap(), 0, lpp); EndDialog (hDlg, 0) ; return FALSE; } SetPropW( hDlg, szColourDialogProp, lpp ); if (!(lpp->lpcc->Flags & CC_SHOWHELP)) ShowWindow( GetDlgItem(hDlg,0x40e), SW_HIDE); lpp->msetrgb = RegisterWindowMessageA(SETRGBSTRINGA); #if 0 cpos = MAKELONG(5,7); /* init */ if (lpp->lpcc->Flags & CC_RGBINIT) { for (i = 0; i < 6; i++) for (j = 0; j < 8; j++) if (predefcolors[i][j] == lpp->lpcc->rgbResult) { cpos = MAKELONG(i,j); goto found; } } found: /* FIXME: Draw_a_focus_rect & set_init_values */ #endif GetWindowRect(hDlg, &lpp->fullsize); if (lpp->lpcc->Flags & CC_FULLOPEN || lpp->lpcc->Flags & CC_PREVENTFULLOPEN) { hwnd = GetDlgItem(hDlg, 0x2cf); EnableWindow(hwnd, FALSE); } if (!(lpp->lpcc->Flags & CC_FULLOPEN ) || lpp->lpcc->Flags & CC_PREVENTFULLOPEN) { rect = lpp->fullsize; res = rect.bottom - rect.top; hwnd = GetDlgItem(hDlg, 0x2c6); /* cut at left border */ point.x = point.y = 0; ClientToScreen(hwnd, &point); ScreenToClient(hDlg,&point); GetClientRect(hDlg, &rect); point.x += GetSystemMetrics(SM_CXDLGFRAME); SetWindowPos(hDlg, 0, 0, 0, point.x, res, SWP_NOMOVE|SWP_NOZORDER); for (i = 0x2bf; i < 0x2c5; i++) ShowWindow( GetDlgItem(hDlg, i), SW_HIDE); for (i = 0x2d3; i < 0x2d9; i++) ShowWindow( GetDlgItem(hDlg, i), SW_HIDE); ShowWindow( GetDlgItem(hDlg, 0x2c9), SW_HIDE); ShowWindow( GetDlgItem(hDlg, 0x2c8), SW_HIDE); ShowWindow( GetDlgItem(hDlg, 0x2c6), SW_HIDE); ShowWindow( GetDlgItem(hDlg, 0x2c5), SW_HIDE); ShowWindow( GetDlgItem(hDlg, 1090 ), SW_HIDE); } else CC_SwitchToFullSize(hDlg, lpp->lpcc->rgbResult, NULL); res = TRUE; for (i = 0x2bf; i < 0x2c5; i++) SendMessageA( GetDlgItem(hDlg, i), EM_LIMITTEXT, 3, 0); /* max 3 digits: xyz */ if (CC_HookCallChk(lpp->lpcc)) { res = CallWindowProcA( (WNDPROC)lpp->lpcc->lpfnHook, hDlg, WM_INITDIALOG, wParam, lParam); } /* Set the initial values of the color chooser dialog */ r = GetRValue(lpp->lpcc->rgbResult); g = GetGValue(lpp->lpcc->rgbResult); b = GetBValue(lpp->lpcc->rgbResult); CC_PaintSelectedColor(hDlg, lpp->lpcc->rgbResult); lpp->h = CC_RGBtoHSL('H', r, g, b); lpp->s = CC_RGBtoHSL('S', r, g, b); lpp->l = CC_RGBtoHSL('L', r, g, b); /* Doing it the long way because CC_EditSetRGB/HSL doesn't seem to work */ SetDlgItemInt(hDlg, 703, lpp->h, TRUE); SetDlgItemInt(hDlg, 704, lpp->s, TRUE); SetDlgItemInt(hDlg, 705, lpp->l, TRUE); SetDlgItemInt(hDlg, 706, r, TRUE); SetDlgItemInt(hDlg, 707, g, TRUE); SetDlgItemInt(hDlg, 708, b, TRUE); CC_PaintCross(hDlg, lpp->h, lpp->s); CC_PaintTriangle(hDlg, lpp->l); return res; }
/*********************************************************************** * CC_WMCommand [internal] */ static LRESULT CC_WMCommand( HWND hDlg, WPARAM wParam, LPARAM lParam, WORD notifyCode, HWND hwndCtl ) { int r, g, b, i, xx; UINT cokmsg; HDC hdc; COLORREF *cr; LPCCPRIV lpp = GetPropW( hDlg, szColourDialogProp ); TRACE("CC_WMCommand wParam=%lx lParam=%lx\n", wParam, lParam); switch (LOWORD(wParam)) { case 0x2c2: /* edit notify RGB */ case 0x2c3: case 0x2c4: if (notifyCode == EN_UPDATE && !lpp->updating) { i = CC_CheckDigitsInEdit(hwndCtl, 255); r = GetRValue(lpp->lpcc->rgbResult); g = GetGValue(lpp->lpcc->rgbResult); b= GetBValue(lpp->lpcc->rgbResult); xx = 0; switch (LOWORD(wParam)) { case 0x2c2: if ((xx = (i != r))) r = i; break; case 0x2c3: if ((xx = (i != g))) g = i; break; case 0x2c4: if ((xx = (i != b))) b = i; break; } if (xx) /* something has changed */ { lpp->lpcc->rgbResult = RGB(r, g, b); CC_PaintSelectedColor(hDlg, lpp->lpcc->rgbResult); lpp->h = CC_RGBtoHSL('H', r, g, b); lpp->s = CC_RGBtoHSL('S', r, g, b); lpp->l = CC_RGBtoHSL('L', r, g, b); CC_EditSetHSL(hDlg, lpp->h, lpp->s, lpp->l); CC_PaintCross(hDlg, lpp->h, lpp->s); CC_PaintTriangle(hDlg, lpp->l); } } break; case 0x2bf: /* edit notify HSL */ case 0x2c0: case 0x2c1: if (notifyCode == EN_UPDATE && !lpp->updating) { i = CC_CheckDigitsInEdit(hwndCtl , LOWORD(wParam) == 0x2bf ? 239:240); xx = 0; switch (LOWORD(wParam)) { case 0x2bf: if ((xx = ( i != lpp->h))) lpp->h = i; break; case 0x2c0: if ((xx = ( i != lpp->s))) lpp->s = i; break; case 0x2c1: if ((xx = ( i != lpp->l))) lpp->l = i; break; } if (xx) /* something has changed */ { r = CC_HSLtoRGB('R', lpp->h, lpp->s, lpp->l); g = CC_HSLtoRGB('G', lpp->h, lpp->s, lpp->l); b = CC_HSLtoRGB('B', lpp->h, lpp->s, lpp->l); lpp->lpcc->rgbResult = RGB(r, g, b); CC_PaintSelectedColor(hDlg, lpp->lpcc->rgbResult); CC_EditSetRGB(hDlg, lpp->lpcc->rgbResult); CC_PaintCross(hDlg, lpp->h, lpp->s); CC_PaintTriangle(hDlg, lpp->l); } } break; case 0x2cf: CC_SwitchToFullSize(hDlg, lpp->lpcc->rgbResult, &lpp->fullsize); SetFocus( GetDlgItem(hDlg, 0x2bf)); break; case 0x2c8: /* add colors ... column by column */ cr = lpp->lpcc->lpCustColors; cr[(lpp->nextuserdef % 2) * 8 + lpp->nextuserdef / 2] = lpp->lpcc->rgbResult; if (++lpp->nextuserdef == 16) lpp->nextuserdef = 0; CC_PaintUserColorArray(hDlg, 2, 8, lpp->lpcc->lpCustColors); break; case 0x2c9: /* resulting color */ hdc = GetDC(hDlg); lpp->lpcc->rgbResult = GetNearestColor(hdc, lpp->lpcc->rgbResult); ReleaseDC(hDlg, hdc); CC_EditSetRGB(hDlg, lpp->lpcc->rgbResult); CC_PaintSelectedColor(hDlg, lpp->lpcc->rgbResult); r = GetRValue(lpp->lpcc->rgbResult); g = GetGValue(lpp->lpcc->rgbResult); b = GetBValue(lpp->lpcc->rgbResult); lpp->h = CC_RGBtoHSL('H', r, g, b); lpp->s = CC_RGBtoHSL('S', r, g, b); lpp->l = CC_RGBtoHSL('L', r, g, b); CC_EditSetHSL(hDlg, lpp->h, lpp->s, lpp->l); CC_PaintCross(hDlg, lpp->h, lpp->s); CC_PaintTriangle(hDlg, lpp->l); break; case 0x40e: /* Help! */ /* The Beatles, 1965 ;-) */ i = RegisterWindowMessageA(HELPMSGSTRINGA); if (lpp->lpcc->hwndOwner) SendMessageA(lpp->lpcc->hwndOwner, i, 0, (LPARAM)lpp->lpcc); if ( CC_HookCallChk(lpp->lpcc)) CallWindowProcA( (WNDPROC) lpp->lpcc->lpfnHook, hDlg, WM_COMMAND, psh15, (LPARAM)lpp->lpcc); break; case IDOK : cokmsg = RegisterWindowMessageA(COLOROKSTRINGA); if (lpp->lpcc->hwndOwner) if (SendMessageA(lpp->lpcc->hwndOwner, cokmsg, 0, (LPARAM)lpp->lpcc)) break; /* do NOT close */ EndDialog(hDlg, 1) ; return TRUE ; case IDCANCEL : EndDialog(hDlg, 0) ; return TRUE ; } return FALSE; }
extern "C" LRESULT FAR PASCAL ComboBoxListBoxProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { switch (nMsg) { case WM_RBUTTONDOWN: { #if FALSE if (m_pComboBox != 0) { INT nCount = m_pComboBox->GetCount(); INT nSelCount = 0; for (INT i = 0; i < nCount; i++) { if (m_pComboBox->GetCheck(i)) nSelCount++; } m_pComboBox->SelectAll(nSelCount != nCount); InvalidateRect(hWnd, 0, FALSE); m_pComboBox->GetParent()->SendMessage(WM_COMMAND, MAKELONG(GetWindowLong(m_pComboBox->m_hWnd, GWL_ID), CBN_SELCHANGE), (LPARAM)m_pComboBox->m_hWnd); } #endif break; } case LB_GETCURSEL: { return -1; } case WM_CHAR: { if (wParam == VK_SPACE) { INT nIndex = CallWindowProcA(m_pWndProc, hWnd, LB_GETCURSEL, wParam, lParam); CRect rcItem; SendMessage(hWnd, LB_GETITEMRECT, nIndex, (LONG)(VOID *)&rcItem); InvalidateRect(hWnd, rcItem, FALSE); m_pComboBox->SetCheck(nIndex, !m_pComboBox->GetCheck(nIndex)); m_pComboBox->GetParent()->SendMessage(WM_COMMAND, MAKELONG(GetWindowLong(m_pComboBox->m_hWnd, GWL_ID), CBN_SELCHANGE), (LPARAM)m_pComboBox->m_hWnd); return 0; } break; } case WM_LBUTTONDOWN: { CRect rcClient; GetClientRect(hWnd, rcClient); CPoint pt; pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); if (PtInRect(rcClient, pt)) { INT nItemHeight = SendMessage(hWnd, LB_GETITEMHEIGHT, 0, 0); INT nTopIndex = SendMessage(hWnd, LB_GETTOPINDEX, 0, 0); INT nIndex = nTopIndex + pt.y / nItemHeight; CRect rcItem; SendMessage(hWnd, LB_GETITEMRECT, nIndex, (LONG)(VOID *)&rcItem); if (PtInRect(rcItem, pt)) { InvalidateRect(hWnd, rcItem, FALSE); m_pComboBox->SetCheck(nIndex, !m_pComboBox->GetCheck(nIndex)); m_pComboBox->GetParent()->SendMessage(WM_COMMAND, MAKELONG(GetWindowLong(m_pComboBox->m_hWnd, GWL_ID), CBN_SELCHANGE), (LPARAM)m_pComboBox->m_hWnd); } } break; } case WM_LBUTTONUP: { return 0; } } return CallWindowProc(m_pWndProc, hWnd, nMsg, wParam, lParam); }
LRESULT WINAPI DefSubclassProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { LPSUBCLASS_INFO stack; LRESULT ret; TRACE ("(%p, 0x%08x, 0x%08lx, 0x%08lx)\n", hWnd, uMsg, wParam, lParam); /* retrieve our little stack from the Properties */ stack = GetPropW (hWnd, COMCTL32_wSubclass); if (!stack) { ERR ("Our sub classing stack got erased for %p!! Nothing we can do\n", hWnd); return 0; } /* If we are at the end of stack then we have to call the original * window procedure */ if (!stack->stackpos) { if (IsWindowUnicode (hWnd)) ret = CallWindowProcW (stack->origproc, hWnd, uMsg, wParam, lParam); else ret = CallWindowProcA (stack->origproc, hWnd, uMsg, wParam, lParam); } else { const SUBCLASSPROCS *proc = stack->stackpos; stack->stackpos = stack->stackpos->next; /* call the Subclass procedure from the stack */ ret = proc->subproc (hWnd, uMsg, wParam, lParam, proc->id, proc->ref); } return ret; }