static BOOL CALLBACK DirPickDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_INITDIALOG: onInitDialog(hWnd, (LPSTR)lParam); break; case WM_COMMAND: HANDLE_WM_COMMAND(hWnd, wParam, lParam, onCommand); break; case WM_MEASUREITEM: { static int cyItem = -1; //Height of a listbox item LPMEASUREITEMSTRUCT lpmis = (LPMEASUREITEMSTRUCT)lParam; if(cyItem == -1) { HFONT hFont = (HFONT)SendMessage(hWnd, WM_GETFONT, 0, 0L); if(hFont == NULL) hFont = GetStockFont(SYSTEM_FONT); HDC hDC = GetDC(hWnd); HFONT hFontOld = SelectFont(hDC, hFont); TEXTMETRIC tm; GetTextMetrics(hDC, &tm); cyItem = max(ITEM_BITMAPHEIGHT, tm.tmHeight); SelectFont(hDC, hFontOld); ReleaseDC(hWnd, hDC); } lpmis->itemHeight = cyItem; } break; case WM_DRAWITEM: onDrawItem((LPDRAWITEMSTRUCT)lParam, ((UINT)wParam == ID_COMBO_DIR)); return TRUE; // to prevent default action in listbox (drawing focus) default: return FALSE; } return TRUE; }
BOOL CALLBACK CalcOptions::wndProc(UINT msg,WPARAM wParam,LPARAM lParam) { switch (msg) { case WM_INITDIALOG: return onInitDialog(); case WM_DRAWITEM: return onDrawItem((LPDRAWITEMSTRUCT)lParam); case WM_COMMAND: switch(wParam) { case IDC_EXPR_FONT: case IDC_RESULT_FONT: case IDC_ERROR_FONT: onFont(wParam); break; case ID_SET_DEFAULTS: onSetDefaults(); break; case ID_HELP_HELPTOPICS: onHelp(); break; case IDOK: case IDCANCEL: return onCloseDialog(wParam); } return TRUE; } return FALSE; }
LRESULT CALLBACK MenuWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PNHMenuWindow data; CheckInputDialog(hWnd, message, wParam, lParam); data = (PNHMenuWindow)GetWindowLong(hWnd, GWL_USERDATA); switch (message) { case WM_INITDIALOG: { HWND text_control; HDC hDC; text_control = GetDlgItem(hWnd, IDC_MENU_TEXT); data = (PNHMenuWindow)malloc(sizeof(NHMenuWindow)); ZeroMemory(data, sizeof(NHMenuWindow)); data->type = MENU_TYPE_TEXT; data->how = PICK_NONE; data->result = 0; data->done = 0; data->bmpChecked = LoadBitmap(GetNHApp()->hApp, MAKEINTRESOURCE(IDB_MENU_SEL)); data->bmpCheckedCount = LoadBitmap(GetNHApp()->hApp, MAKEINTRESOURCE(IDB_MENU_SEL_COUNT)); data->bmpNotChecked = LoadBitmap(GetNHApp()->hApp, MAKEINTRESOURCE(IDB_MENU_UNSEL)); SetWindowLong(hWnd, GWL_USERDATA, (LONG)data); /* subclass edit control */ editControlWndProc = (WNDPROC)GetWindowLong(text_control, GWL_WNDPROC); SetWindowLong(text_control, GWL_WNDPROC, (LONG)NHMenuTextWndProc); /* set text window font */ hDC = GetDC(text_control); SendMessage( text_control, WM_SETFONT, (WPARAM)mswin_get_font(NHW_TEXT, ATR_NONE, hDC, FALSE), (LPARAM)0 ); ReleaseDC(text_control, hDC); #if defined(WIN_CE_SMARTPHONE) /* special initialization for SmartPhone dialogs */ NHSPhoneDialogSetup(hWnd, FALSE, GetNHApp()->bFullScreen); #endif } break; case WM_MSNH_COMMAND: onMSNHCommand(hWnd, wParam, lParam); break; case WM_SIZE: LayoutMenu(hWnd); return FALSE; case WM_COMMAND: { switch (LOWORD(wParam)) { case IDCANCEL: if( data->type == MENU_TYPE_MENU && (data->how==PICK_ONE || data->how==PICK_ANY) && data->menu.counting) { HWND list; int i; /* reset counter if counting is in progress */ list = GetMenuControl(hWnd); i = ListView_GetNextItem(list, -1, LVNI_FOCUSED); if( i>=0 ) { SelectMenuItem(list, data, i, 0); } return FALSE; } else { data->result = -1; data->done = 1; } return FALSE; case IDOK: data->done = 1; data->result = 0; return FALSE; } } break; case WM_NOTIFY: { LPNMHDR lpnmhdr = (LPNMHDR)lParam; switch (LOWORD(wParam)) { case IDC_MENU_LIST: { if( !data || data->type!=MENU_TYPE_MENU ) break; switch(lpnmhdr->code) { case LVN_ITEMACTIVATE: { LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)lParam; if(data->how==PICK_ONE) { if( lpnmlv->iItem>=0 && lpnmlv->iItem<data->menu.size && NHMENU_IS_SELECTABLE(data->menu.items[lpnmlv->iItem]) ) { SelectMenuItem( lpnmlv->hdr.hwndFrom, data, lpnmlv->iItem, -1 ); data->done = 1; data->result = 0; return TRUE; } } else if( data->how==PICK_ANY ) { if( lpnmlv->iItem>=0 && lpnmlv->iItem<data->menu.size && NHMENU_IS_SELECTABLE(data->menu.items[lpnmlv->iItem]) ) { SelectMenuItem( lpnmlv->hdr.hwndFrom, data, lpnmlv->iItem, NHMENU_IS_SELECTED(data->menu.items[lpnmlv->iItem])? 0 : -1 ); } } } break; case NM_CLICK: { LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW) lParam; if( lpnmlv->iItem==-1 ) return 0; if( data->how==PICK_ANY ) { SelectMenuItem( lpnmlv->hdr.hwndFrom, data, lpnmlv->iItem, NHMENU_IS_SELECTED(data->menu.items[lpnmlv->iItem])? 0 : -1 ); } } break; case LVN_ITEMCHANGED: { LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)lParam; if( lpnmlv->iItem==-1 ) return 0; if( !(lpnmlv->uChanged & LVIF_STATE) ) return 0; /* update item that has the focus */ data->menu.items[lpnmlv->iItem].has_focus = !!(lpnmlv->uNewState & LVIS_FOCUSED); ListView_RedrawItems(lpnmlv->hdr.hwndFrom, lpnmlv->iItem, lpnmlv->iItem); /* update count for single-selection menu (follow the listview selection) */ if( data->how==PICK_ONE ) { if( lpnmlv->uNewState & LVIS_SELECTED ) { SelectMenuItem( lpnmlv->hdr.hwndFrom, data, lpnmlv->iItem, -1 ); } } /* check item focus */ data->menu.items[lpnmlv->iItem].has_focus = !!(lpnmlv->uNewState & LVIS_FOCUSED); ListView_RedrawItems(lpnmlv->hdr.hwndFrom, lpnmlv->iItem, lpnmlv->iItem); } break; case NM_KILLFOCUS: reset_menu_count(lpnmhdr->hwndFrom, data); break; } } break; } } break; case WM_SETFOCUS: if( hWnd!=GetNHApp()->hPopupWnd ) { SetFocus(GetNHApp()->hPopupWnd ); return 0; } break; case WM_MEASUREITEM: if( wParam==IDC_MENU_LIST ) return onMeasureItem(hWnd, wParam, lParam); else return FALSE; case WM_DRAWITEM: if( wParam==IDC_MENU_LIST ) return onDrawItem(hWnd, wParam, lParam); else return FALSE; case WM_CTLCOLORBTN: case WM_CTLCOLOREDIT: case WM_CTLCOLORSTATIC: { /* sent by edit control before it is drawn */ HDC hdcEdit = (HDC) wParam; HWND hwndEdit = (HWND) lParam; if( hwndEdit == GetDlgItem(hWnd, IDC_MENU_TEXT) ) { SetBkColor(hdcEdit, mswin_get_color(NHW_TEXT, MSWIN_COLOR_BG)); SetTextColor(hdcEdit, mswin_get_color(NHW_TEXT, MSWIN_COLOR_FG)); return (BOOL)mswin_get_brush(NHW_TEXT, MSWIN_COLOR_BG); } } return FALSE; case WM_DESTROY: if( data ) { DeleteObject(data->bmpChecked); DeleteObject(data->bmpCheckedCount); DeleteObject(data->bmpNotChecked); if( data->type == MENU_TYPE_TEXT ) { if( data->text.text ) { mswin_free_text_buffer(data->text.text); data->text.text = NULL; } } free(data); SetWindowLong(hWnd, GWL_USERDATA, (LONG)0); } return TRUE; } return FALSE; }
void ListCtrl::onDraw( HDC hdc, const Rect& rcPaint ) { Rect rc = getRect(); if (!verify()) { WfxRender::drawFrame(hdc, rc, WBTN_BKGND_MOUSE, getDispatcher()); return; } LCDrawItemInfo* pDrawItemInfo = getDrawItemInfo(); pDrawItemInfo->clear(); pDrawItemInfo->m_hDC = hdc; Rect rcCell; DWORD dwState = WCS_NORMAL; ULONG nLayer = 0; BOOL bRowexpanded = FALSE; COLORREF clrText = 0; LONG nLayerOffset = 0; LONG nTotalRow = getTotalRows(); LONG nTotalCol = getTotalColumns(); ULONG nSeqBarWidth = getRowNumBarWidth(); ObjectAdapterBase* pOjbect = NULL; for (LONG nRow = m_nStartRow, nRowNum = 0; nRow <= m_nEndRow; nRow++, nRowNum++) { pDrawItemInfo->m_nRow = nRow; WFX_CONDITION(m_rgRowNumRect.size() > nRowNum); pDrawItemInfo->m_prcItem = &m_rgRowNumRect[nRowNum]; pDrawItemInfo->m_dwState = 0; onDrawSeqBar(pDrawItemInfo); nLayer = getLayer(nRow); nLayerOffset = (nLayer - 1) * 30; clrText = getColor(nLayer); if (m_bHasSubItem) { bRowexpanded = isExpanded(nRow); } pOjbect = m_pArrayAdapter->getAt(nRow); WFX_CONDITION(pOjbect != NULL); for (LONG nCol = m_nStartCol; nCol <= m_nEndCol; nCol++) { WFX_CONDITION(nCol < pOjbect->getCount()); AttributeBase* pAttribute = pOjbect->getAt(nCol); WFX_CONDITION(pAttribute != NULL); CellID cellID(nRow, nCol); dwState = WCS_NORMAL; if (m_bHasSubItem && nCol == 0) { if (bRowexpanded) { dwState |= WCS_EXPAND; } else { dwState |= WCS_CLOSE; } } if (m_cellSelected == cellID) { dwState |= WCS_SELECTED; } if (m_cellMouseMove == cellID) { dwState |= WCS_MOUSEMOVE; } rcCell = getCellRect(nRow, nCol); rcCell.left += nLayerOffset; pDrawItemInfo->m_nCol = nCol; pDrawItemInfo->m_prcItem = &rcCell; pDrawItemInfo->m_dwState = dwState; pDrawItemInfo->m_pszText = pAttribute->getText().c_str(); pDrawItemInfo->m_dwFormat = pAttribute->getFormat(); onDrawItem(pDrawItemInfo); } } WfxRender::drawFrame(hdc, rc, WBTN_BKGND_MOUSE, getDispatcher()); }