static void InitializeDirectPlayDialog(HWND hwndDlg) { HKEY hKey; LONG result; HWND hDlgCtrl; /* open DirectPlay8 key */ result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\DirectPlay8\\Service Providers", 0, KEY_READ, &hKey); if (result != ERROR_SUCCESS) return; hDlgCtrl = GetDlgItem(hwndDlg, IDC_LIST_PROVIDER); /* initialize list ctrl */ InitListViewColumns(hDlgCtrl); /* enumerate providers */ result = EnumerateServiceProviders(hKey, hDlgCtrl, DirectPlay8SP); RegCloseKey(hKey); if (!result) return; /* open DirectPlay key */ result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\DirectPlay\\Service Providers", 0, KEY_READ, &hKey); if (result != ERROR_SUCCESS) return; /* enumerate providers */ EnumerateServiceProviders(hKey, hDlgCtrl, DirectPlaySP); RegCloseKey(hKey); }
/* ************************************ * HWND CreateListView (HWND hwndParent, LPSTR szWindowName) * 功能 创建 List View * 参数 hwndParent,父窗口 * szWindowName,窗口标题 * 返回值 窗口句柄 **************************************/ HWND CreateListView (HWND hwndParent, LPSTR szWindowName) { HWND hWndListView; // 创建List View hWndListView = CreateWindow ( WC_LISTVIEW, // List View窗口类 // 窗口标题,由于未指定 WS_TILED ,这是一个无标题的窗口 szWindowName, // 窗口样式,可视,子窗口,以及List View样式 WS_VISIBLE | WS_CHILD | LVS_REPORT | LVS_EDITLABELS, // 位置和大小,创建完成后使用SetWindows设置 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwndParent, // 父窗口 NULL, hinst, NULL); // 无菜单,无图标 if (hWndListView == NULL) { return NULL; } // 初始化Image List、初始化列、加入一些项 if(InitListViewImageLists(hWndListView) && InitListViewColumns(hWndListView) && AddListViewItems(hWndListView)) { return hWndListView; } DestroyWindow(hWndListView); return FALSE; }
static void InitializeDirectInputDialog(HWND hwndDlg) { INPUT_DIALOG_CONTEXT Context; HRESULT hResult; IDirectInput8W * pObj; hResult = DirectInput8Create(hInst, DIRECTINPUT_VERSION, &IID_IDirectInput8W, (LPVOID*)&pObj, NULL); if (hResult != DI_OK) return; ZeroMemory(&Context, sizeof(Context)); Context.pObj = pObj; Context.hwndDlg = hwndDlg; InitListViewColumns(&Context); pObj->lpVtbl->EnumDevices(pObj, DI8DEVCLASS_ALL, DirectInputEnumDevCb, (PVOID)&Context, DIEDFL_ALLDEVICES); pObj->lpVtbl->Release(pObj); }
LRESULT CALLBACK stream_WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { RECT rect ; int cxClient, cyClient; static HMENU hMenu ; POINT point ; int ret, idx; TCHAR buf[64]; char file_name[MAX_FILE_PATH_LEN]; static int edit_iItem=-1 ; static int edit_iSubItem; LVITEM lv_item; switch (message) { case WM_CREATE: hwnd_stream= hwnd; hMenu = LoadMenu (g_hInstance, TEXT("my_popup_menu")) ; hMenu = GetSubMenu (hMenu, 0) ; hwnd_dynamic_edit=CreateWindow (TEXT("edit"), TEXT(""), WS_CHILD|ES_AUTOHSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, (HMENU)ID_DYNAMIC_EDIT, g_hInstance, NULL) ; SendMessage(hwnd_dynamic_edit, WM_SETFONT, (WPARAM)char_font_2, 0); hwnd_lv = CreateListView(hwnd); //InitListViewImageLists(hwnd_lv); InitListViewColumns(hwnd_lv); lv_row_color_init(); old_lv_proc = (WNDPROC) SetWindowLong (hwnd_lv, GWL_WNDPROC, (LONG)my_lv_proc) ; ShowWindow(hwnd_lv, 1) ; refresh_window(hwnd_lv) ; add_tip(hwndTip, hwnd_lv, TEXT("点击鼠标右键进行操作")); return 0 ; case WM_SIZE: cxClient = LOWORD (lParam) ; cyClient = HIWORD (lParam) ; MoveWindow(hwnd_lv, 0, 0, cxClient, cyClient, TRUE) ; return 0 ; case WM_NOTIFY: { NMHDR *pt_nmhdr=(void *)lParam; switch(LOWORD(wParam)) { case ID_LV: // if code == NM_CLICK - Single click on an item if(pt_nmhdr->code == NM_CLICK || pt_nmhdr->code == NM_DBLCLK) { int iItem = ((LPNMITEMACTIVATE)lParam)->iItem; int iSubItem=((LPNMITEMACTIVATE)lParam)->iSubItem; if (iItem>=0 && ((iSubItem>=3 && iSubItem<=5) || iSubItem==7)) { ListView_GetSubItemRect(hwnd_lv,iItem,iSubItem,LVIR_LABEL,&rect); ListView_GetItemText(hwnd_lv, iItem, iSubItem, buf, sizeof(buf)); MoveWindow (hwnd_dynamic_edit ,rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, TRUE); SetWindowText(hwnd_dynamic_edit, buf); ShowWindow (hwnd_dynamic_edit, 1) ; SetFocus(hwnd_dynamic_edit); SendMessage(hwnd_dynamic_edit, EM_SETSEL, (WPARAM)0, (LPARAM)-1); edit_iItem = iItem; edit_iSubItem = iSubItem; } return 0; } else if (pt_nmhdr->code == NM_RCLICK) { point = ((LPNMITEMACTIVATE)lParam)->ptAction; ListView_GetItem(hwnd_lv, &lv_item); ClientToScreen (hwnd_lv, &point) ; TrackPopupMenu (hMenu, TPM_LEFTBUTTON, point.x, point.y, 0, hwnd_stream, NULL) ; return 0; } else if (pt_nmhdr->code == LVN_ITEMCHANGED) { if (!init_over) break; if (lv_in_op) break; //if((((LPNMLISTVIEW)lParam)->uOldState&LVIS_STATEIMAGEMASK) != // (((LPNMLISTVIEW)lParam)->uNewState&LVIS_STATEIMAGEMASK)) { int iItem = ((LPNMITEMACTIVATE)lParam)->iItem; int selected = ListView_GetCheckState(hwnd_lv, iItem); if (g_apt_streams[iItem]->selected!=selected) { doc_modified=1; g_apt_streams[iItem]->selected=selected; update_statusbar(); } } return 0; } break; } break; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDM_STREAM_NEW: init_stream(>_edit_stream); gt_edit_stream.len=gat_sample_pkts[0].len; memcpy(gt_edit_stream.data, gat_sample_pkts[0].pkt_data, gt_edit_stream.len); ret=DialogBox(g_hInstance, TEXT("STREAM_EDIT_DLG"), hwnd, StreamEditDlgProc); if (IDOK==ret) { add_stream(>_edit_stream); re_populate_items(); } return 0 ; case IDM_STREAM_NEW_HEX: { int len; char buf[MAX_PACKET_LEN]; if (get_open_file_name(file_name, hwnd, ALL_FILE_FILTER)) return 0; len = read_file_to_buf(buf, sizeof(buf)-1, file_name); if (len>0) add_stream_from_hex_text(buf, len); else err_msg_box("读取文件内容失败"); return 0 ; } case IDM_STREAM_NEW_BIN: { int len; char buf[MAX_PACKET_LEN]; if (get_open_file_name(file_name, hwnd, ALL_FILE_FILTER)) return 0; len = read_file_to_buf(buf, sizeof(buf)-1, file_name); if (len>0) add_stream_from_raw_data(buf, len); else err_msg_box("读取文件内容失败"); return 0 ; } case IDM_STREAM_NEW_PCAP: { if (get_open_file_name(file_name, hwnd, PCAP_FILE_FILTER)) return 0; add_stream_from_pcap(file_name); return 0 ; } case IDM_STREAM_DEL: idx=GetIndex(hwnd_lv); //ListView_DeleteItem(hwnd_lv, idx); delete_stream(idx); re_populate_items(); update_statusbar(); return 0 ; case IDM_STREAM_EDIT: cur_strm_idx=GetIndex(hwnd_lv); if (cur_strm_idx<0) return 0; cpy_stream(>_edit_stream, g_apt_streams[cur_strm_idx]); ret=DialogBox(g_hInstance, TEXT("STREAM_EDIT_DLG"), hwnd, StreamEditDlgProc); if (IDOK==ret) { doc_modified=1; cpy_stream(g_apt_streams[cur_strm_idx], >_edit_stream); re_populate_items(); } //ListView_DeleteAllItems(hwnd_lv); return 0 ; case IDM_STREAM_DEL_SEL: //DelSel(hwnd_lv); delete_sel_stream(); re_populate_items(); update_statusbar(); return 0 ; case IDM_STREAM_SEL_ALL: SelAll(hwnd_lv); return 0 ; case IDM_STREAM_SEL_RVS: SelRvs(hwnd_lv); return 0 ; case IDM_STREAM_COPY: copy_idx = GetIndex(hwnd_lv); return 0 ; case IDM_STREAM_PASTE: cpy_stream(>_edit_stream, g_apt_streams[copy_idx]); add_stream(>_edit_stream); re_populate_items(); return 0 ; case IDM_STREAM_MAKE_FRAGS: { ret=DialogBox(g_hInstance, TEXT("FRAG_DLG"), hwnd, FragDlgProc); return 0 ; } case IDM_STREAM_SEL2PCAP: { ret=get_save_file_name(file_name, hwnd, PCAP_FILE_FILTER, PCAP_FILE_SUFFIX); if (ret) return 0 ; stream2dump(file_name); update_pcap_file_history(file_name); return 0 ; } case IDM_STREAM_2_BIN: { ret=get_save_file_name(file_name, hwnd, BIN_FILE_FILTER, BIN_FILE_SUFFIX); if (ret) return 0 ; stream_2_bin(file_name); return 0 ; } case IDM_STREAM_2_TEXT: { ret=get_save_file_name(file_name, hwnd, TEXT_FILE_FILTER, TEXT_FILE_SUFFIX); if (ret) return 0 ; stream_2_text(file_name); return 0 ; } case ID_DYNAMIC_EDIT: if (HIWORD(wParam)==EN_KILLFOCUS) { update_grid_from_edit(edit_iItem, edit_iSubItem); edit_iItem=-1; return 0 ; } } break; case WM_KEYDOWN: if (VK_RETURN==wParam) { SetFocus(hwnd); return 0; } break; case WM_INITMENUPOPUP: { int idx=GetIndex(hwnd_lv); t_stream *pt_stream = g_apt_streams[idx]; int sel_cnt=GetSelCnt(hwnd_lv); int item_cnt=ListView_GetItemCount(hwnd_lv); if (lParam == 0) { UINT add_stream_menu_state = nr_cur_stream<MAX_STREAM_NUM ? MF_ENABLED : MF_GRAYED; EnableMenuItem ((HMENU) wParam, IDM_STREAM_NEW, add_stream_menu_state); EnableMenuItem ((HMENU) wParam, IDM_STREAM_NEW_HEX, add_stream_menu_state); EnableMenuItem ((HMENU) wParam, IDM_STREAM_NEW_BIN, add_stream_menu_state); EnableMenuItem ((HMENU) wParam, IDM_STREAM_NEW_PCAP, add_stream_menu_state); EnableMenuItem ((HMENU) wParam, IDM_STREAM_EDIT, idx>=0 ? MF_ENABLED : MF_GRAYED); EnableMenuItem ((HMENU) wParam, IDM_STREAM_DEL, idx>=0 ? MF_ENABLED : MF_GRAYED); EnableMenuItem ((HMENU) wParam, IDM_STREAM_COPY, idx>=0 ? MF_ENABLED : MF_GRAYED); EnableMenuItem ((HMENU) wParam, IDM_STREAM_PASTE, copy_idx>=0 && item_cnt>copy_idx ? MF_ENABLED : MF_GRAYED); EnableMenuItem ((HMENU) wParam, IDM_STREAM_DEL_SEL, sel_cnt ? MF_ENABLED : MF_GRAYED); EnableMenuItem ((HMENU) wParam, IDM_STREAM_SEL_ALL, item_cnt ? MF_ENABLED : MF_GRAYED); EnableMenuItem ((HMENU) wParam, IDM_STREAM_SEL_RVS, item_cnt ? MF_ENABLED : MF_GRAYED); EnableMenuItem ((HMENU) wParam, IDM_STREAM_MAKE_FRAGS, idx>=0&&stream_fragable(pt_stream) ? MF_ENABLED : MF_GRAYED); EnableMenuItem ((HMENU) wParam, IDM_STREAM_SEL2PCAP, sel_cnt ? MF_ENABLED : MF_GRAYED); EnableMenuItem ((HMENU) wParam, IDM_STREAM_2_BIN, idx>=0 ? MF_ENABLED : MF_GRAYED); EnableMenuItem ((HMENU) wParam, IDM_STREAM_2_TEXT, idx>=0 ? MF_ENABLED : MF_GRAYED); return 0; } break; } } return DefWindowProc (hwnd, message, wParam, lParam) ; }
BOOL CALLBACK PickCertDialogProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { BOOL fRet = TRUE; PNETUI_PICKCERT pPickCert ; //HCERTSTORE hStore= (HCERTSTORE) lParam; LONG wCmdId; LONG wCmdCbn; LVITEM lvI; HWND hCtlList = GetDlgItem(hDlg, IDC_CERTLISTVIEW); switch (uMsg) { case WM_NOTIFY : break; case WM_INITDIALOG : { pPickCert = (PNETUI_PICKCERT) lParam; SetWindowLong (hDlg, DWL_USER, (LONG)pPickCert); ListView_SetExtendedListViewStyle(hCtlList, LVS_EX_FULLROWSELECT ); if (!pPickCert) fRet = FALSE; else fRet = InitListViewColumns(hCtlList); if (fRet) { PopulateListView(hCtlList, pPickCert); } } break; case WM_COMMAND : wCmdId = LOWORD(wParam); wCmdCbn = HIWORD(wParam); switch ( wCmdId ) { case IDCANCEL: EndDialog(hDlg,FALSE); break; case IDOK: { lvI.iItem = -1; lvI.lParam = 0; lvI.iSubItem = 0; lvI.mask = LVIF_PARAM; if (hCtlList) lvI.iItem = ListView_GetNextItem(hCtlList, -1, LVNI_SELECTED); if (lvI.iItem != -1 ) { ListView_GetItem(hCtlList, &lvI); } pPickCert = (PNETUI_PICKCERT)GetWindowLong(hDlg, DWL_USER); if (pPickCert) pPickCert->iSelected = lvI.lParam; EndDialog(hDlg, TRUE); break; } case IDC_BTN_CERTVIEW: { // Details button lvI.iItem = -1; lvI.lParam = 0; lvI.iSubItem = 0; lvI.mask = LVIF_PARAM; lvI.iItem = ListView_GetNextItem(hCtlList, -1, LVNI_SELECTED); ListView_GetItem(hCtlList, &lvI); pPickCert = (PNETUI_PICKCERT)GetWindowLong(hDlg, DWL_USER); if (pPickCert && lvI.iItem != -1 && pPickCert->ppCerts[lvI.lParam]) { ShowCertificate(hDlg, pPickCert->ppCerts[lvI.lParam]); } break; } default: fRet = FALSE; break; } default: fRet = FALSE; break; } return fRet; }