|
![]() | 作者: battle [battle]
![]() |
登录 |
#include <windows.h> #include "resource.h" #include <commctrl.h> #pragma comment(lib, "comctl32.lib") #define ID_LISTVIEW 2000 #define IDR_TOOLBARER 2001 HWND hwndListViewswq; char frameclass[] = "Frame55555555555555555555555555555555555555555555555555"; LRESULT CALLBACK FrameProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam); LRESULT CALLBACK TreeProc(HWND,UINT,WPARAM,LPARAM); HWND CreateHotelListView(HWND hWnd); HWND CreateToolBar(HWND hWnd); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstnace,LPSTR lpCmdLine,int iCmdShow) { WNDCLASS Wndclass; MSG msg; HWND hWndFrame; HACCEL hAccel; Wndclass.style = CS_HREDRAW | CS_VREDRAW; Wndclass.cbClsExtra = 0; Wndclass.cbWndExtra = 0; Wndclass.hInstance = hInstance; Wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); Wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); Wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); Wndclass.lpszMenuName = NULL; Wndclass.lpszClassName = frameclass; Wndclass.lpfnWndProc = FrameProc; if(!RegisterClass(&Wndclass)) return 0; InitCommonControls(); hWndFrame = CreateWindow(frameclass, frameclass, WS_OVERLAPPEDWINDOW, 0,0, 650, 500, NULL, NULL, hInstance, NULL); ShowWindow(hWndFrame,iCmdShow); UpdateWindow(hWndFrame); hAccel = LoadAccelerators(hInstance,frameclass); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK FrameProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam) { HMENU hMenu; POINT ps; switch(Message) { case WM_CREATE: hwndListViewswq = CreateHotelListView(hWnd); break; case WM_LBUTTONDOWN: hMenu = LoadMenu((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),(LPSTR)IDR_MENU1); hMenu = GetSubMenu(hMenu,0); ClientToScreen(hWnd,&ps); TrackPopupMenu(hMenu,TPM_RIGHTBUTTON,ps.x,ps.y,0,hWnd,NULL); break; case WM_DESTROY: PostQuitMessage(0); break; case WM_NOTIFY: TreeProc(hWnd,Message,wParam,lParam);//接受控件消息ListView break; } return DefWindowProc(hWnd,Message,wParam,lParam); } HWND CreateHotelListView(HWND hWnd)//创建ListVIew { hwndListViewswq = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, "", WS_TABSTOP | WS_CHILD | WS_VISIBLE | LVS_REPORT, 0,0,300,200, hWnd, (HMENU)ID_LISTVIEW, (HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE), NULL); LV_COLUMN lvColumn; int i; TCHAR szString[3][20] = {"用户名","绰号", "网速"}; ListView_DeleteAllItems(hwndListViewswq); lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvColumn.fmt = LVCFMT_LEFT; lvColumn.cx = 70; for(i = 0; i < 3; i++) { lvColumn.pszText = szString[i]; ListView_InsertColumn(hwndListViewswq, i, &lvColumn); } } LRESULT CALLBACK TreeProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam) { HMENU hMenu; POINT ps; ps.x = LOWORD(lParam); ps.y = HIWORD(lParam); ClientToScreen(hWnd,&ps); LV_DISPINFO *lpdi = (LV_DISPINFO *)lParam; #define lpnm ((LPNMHDR)lParam) #define pnmtv ((LPNMTREEVIEW) lParam) switch(lpnm->code) { case NM_RCLICK: hMenu = LoadMenu((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),(LPSTR)IDR_MENU1); hMenu = GetSubMenu(hMenu,0); TrackPopupMenu(hMenu,TPM_RIGHTBUTTON,ps.x,ps.y,0,hWnd,NULL); break; } return FALSE; } 为什么单击右键以后..菜单显示的地方不是鼠标的旁边...始终在右上角/////屡试不爽啊// |
地主 发表时间: 05-04-28 16:50 |
![]() | 回复: jhkdiy [jhkdiy] ![]() |
登录 |
TrackPopupMenu(hMenu,TPM_RIGHTBUTTON,ps.x,ps.y,0,hWnd,NULL); TPM_RIGHTBUTTON + TPM_LEFTALIGN |
B1层 发表时间: 05-04-28 20:42 |
![]() | 回复: battle [battle] ![]() |
登录 |
用 TrackPopupMenu(hMenu,TPM_RIGHTBUTTON|TPM_LEFTALIGN,ps.x,ps.y,0,hWnd,NULL); 没弄好阿.....谢谢你阿.. 我用GetCursorPos() 解决这个问题了..... |
B2层 发表时间: 05-04-29 10:01 |
![]() | 回复: jhkdiy [jhkdiy] ![]() |
登录 |
我差点忘了菜单是相对于整个屏幕坐标的。哎~~ |
B3层 发表时间: 05-04-29 11:03 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号