测试demo:#include <windows.h>HWND hWindow;HMENU hMenu;LRESULT CALLBACK MainProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) {
switch( msg) {
case WM_CLOSE:
::DestroyWindow(hWnd);
break;
case WM_RBUTTONUP:
{ hMenu=CreateMenu(); MENUITEMINFO mi; mi.cbSize = sizeof(MENUITEMINFO);
mi.fMask = MIIM_TYPE | MIIM_STRING;
mi.fType = MFT_STRING;
mi.dwTypeData = (char*)"aaaaa";
//这里经过了查阅msdn,数小时的google,试用了各种参数组合方法,最好的情况就是显示一个很窄的popup menu
::AppendMenu(hMenu, MF_STRING, (int)mi.dwTypeData, mi.dwTypeData); POINT pt;
::GetCursorPos(&pt);
::TrackPopupMenu(hMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hWnd, NULL);

}
break;
case WM_DESTROY:
::PostQuitMessage(0);
break;
} return(::DefWindowProc(hWnd, msg, wParam, lParam));
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { WNDCLASSEX wndClass;    wndClass.lpszClassName = "Test01";
    wndClass.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC;
    wndClass.hInstance = hInstance;
    wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wndClass.hCursor = LoadCursor(NULL, IDC_CROSS);
    wndClass.cbClsExtra = 0;
    wndClass.cbWndExtra = 0;
    wndClass.lpszMenuName = NULL;
wndClass.hIcon = NULL;
    wndClass.hIconSm = NULL;
    wndClass.lpfnWndProc = MainProc;
    wndClass.cbSize = sizeof(WNDCLASSEX);

RegisterClassEx(&wndClass); hWindow = CreateWindowEx( WS_EX_TOPMOST, "Test01", "Test01", 
   WS_OVERLAPPEDWINDOW,
   200, 200,300,300, NULL, NULL, hInstance, NULL);
ShowWindow(hWindow, true);
UpdateWindow(hWindow); MSG msg;
while(::GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
} return 0;
}问题1: 以上程序是一个白色窗口,右键点击时候会弹出popup menu,但menu为什么很窄,这是为啥?
问题2: TrackPopupMenu函数需要一个Owner hwnd(倒数第2个参数),这是为什么,有什么办法让弹出menu不需要owner hwnd?