还有一个问题,是VB的我怎样才能把一个ActiveX控件加到一个用CreateWindowEx创建的窗口上
                                     ~~~~~~~~~~~~~~~~~~~~~~~~
,并能响应ActiveX Control的事件?困扰我很久啦!

解决方案 »

  1.   

    我是在OnRButtonDown里TrackPopUpMenu的,完全可以达到你说的这个效果
      

  2.   

    对了,还有个问题如何立即关闭显示器?要求:
    1.不准用手关
    2。不准叫其他人用手关
    3。用Win32 SDK
      

  3.   

    似的,在OnContextMenu里响应也可以这样的。你的程序有些问题罢
      

  4.   

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    POINT p;
    TCHAR szHello[MAX_LOADSTRING];
    LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); switch (message) 
    {
    case WM_CONTEXTMENU:
    GetCursorPos(&p);
    TrackPopupMenu(GetSubMenu(GetMenu(hWnd),0),0,p.x,p.y,0,hWnd,0); 
    break;
    case WM_COMMAND:
    wmId    = LOWORD(wParam); 
    wmEvent = HIWORD(wParam); 
    // Parse the menu selections:
    switch (wmId)
    {
    case IDM_ABOUT:
       DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
       break;
    case IDM_EXIT:
       DestroyWindow(hWnd);
       break;
    default:
       return DefWindowProc(hWnd, message, wParam, lParam);
    }
    break;
    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    // TODO: Add any drawing code here...
    RECT rt;
    GetClientRect(hWnd, &rt);
    DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
    EndPaint(hWnd, &ps);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hWnd, message, wParam, lParam);
       }
       return 0;
    }
      

  5.   

    上面的
            case WM_CONTEXTMENU:
                GetCursorPos(&p);
                TrackPopupMenu(GetSubMenu(GetMenu(hWnd),0),0,p.x,p.y,0,hWnd,0); 
                break;就座不到我说的效果,该怎么改呢?
      

  6.   

    你真不幸,
    case WM_CONTEXTMENU:
                GetCursorPos(&p);
                TrackPopupMenu(GetSubMenu(GetMenu(hWnd),0),0,p.x,p.y,0,hWnd,0); 
                break;
    我拷过来一试就灵。
      

  7.   

    case WM_CONTEXTMENU:
    SendMessage(hWnd,WM_CANCELMODE,0,0);
    GetCursorPos(&p);
    TrackPopupMenu(GetSubMenu(GetMenu(hWnd),0),0,p.x,p.y,0,hWnd,0); 
    break;
    这样也不行
      

  8.   

    有这样的事?我是Win98+VC6+SP5我加了句SendMessage(hWnd,WM_CANCELMODE,0,0);后菜单能被隐藏了,但是不会在新的地方在显示,难道我见鬼了?
      

  9.   

    问题一:我在WM_CONTEXTMENU消息中用TrackPopupMenuEx展开一个菜单,我希望用户在窗口其他地方右击鼠标时,原有正在显示的菜单能被隐藏,并在新的位置重新显示菜单。但是有个问题,如果有菜单正在显示,用户在窗口其他地方右击鼠标时,能收到WM_CONTEXTMENU消息,但是TrackPopupMenuEx并不能重新显示菜单。如果我先发送一个WM_CANCELMODE消息,原来的菜单可以被隐藏,但是TrackPopupMenuEx仍然不能重新显示菜单,该怎么办呢?就像IE那样,你右击页面后弹出菜单,你别等菜单消失,在页面其他地方右击鼠标,菜单会在新的位置重新出现 问题二:
    如何立即关闭显示器?
    要求:
    1.不准用手关
    2。不准叫其他人用手关
    3。用Win32 SDK 
    问题三:
    还有一个问题,是VB的我怎样才能把一个ActiveX控件加到一个用CreateWindowEx创建的窗口上
                                        ~~~~~~~~~~~~~~~~~~~~~~~~
    ,并能响应ActiveX Control的事件?困扰我很久啦! 
      

  10.   


    还有一种方法,你可以试一下:ExitWindowsEx( EWX_POWEROFF, 0 ); //注意:
    //1、主板需为ATX结构
    //2、如果是在NT下,可能要关系到优先级问题
      

  11.   

    问题1解决   james_razor(Blade)   50分问题2,不能有关击界面!而且我是要关闭显示器,而不是把系统转入睡眠状态
      

  12.   

    谢谢,谢谢。
    还好我没有把SetSystemPowerState贴上去,要不你会不会倒扣我分啊,呵呵。
      

  13.   

    ginkgoboy(彝族舞曲),答非所问,得-50分:)
      

  14.   

    好象有一个shell 叫做 RUNDLL.EXE user.exe,exitwindows,先建立快街方式,你用vc 里的函数调用不就行了?
      

  15.   

    呵呵,jifeng(疾风)你误会了,我当然知道你要节省能量,我是问xiao_tian(啸天)的RUNDLL.EXE user.exe,exitwindows是干什么用的,我看不懂啊。
      

  16.   

    开启系统的节电mode不就可以了吗?不懂!!!
      

  17.   

    我就是希望不管用户是否开启系统的节电mode,都有我说的效果
      

  18.   

    SO EASY的问题,大家为什么不看看别人的原代码呢
    THAT‘S:SetForegroundWindow(HWND hWnd)
            在调用TrackPopupMenu之前调用。
      

  19.   

    还有一个问题,是VB的
    我怎样才能把一个ActiveX控件加到一个用CreateWindowEx创建的窗口上
                                       ~~~~~~~~~~~~~~~~~~~~~~~~
    ,并能响应ActiveX Control的事件?困扰我很久啦! 这个问题比较繁。首先创建是没有问题的,使用CreateControl或是干脆用CoCreateInstance
    但如果要在SDK中进行ActiveX的消息响应,则需要实现ActiveX的Sink
    具体可以看Inside Com+ BaseServices中的第八章:连接点。
    记得加分
      

  20.   

    好啦,还有问题2问题二:
    如何立即关闭显示器?
    要求:
    1.不准用手关
    2。不准叫其他人用手关
    3。用Win32 SDK to:phy(beatrice) 不是我不给分,一给分就没人看了,你这么看中分么,我一定会给的,即使你没回答问题为了感谢各位的热心,我再加100分
      

  21.   

    如何立即关闭显示器?SendMessage(HWND, WM_SYSCOMMAND, SC_MONITORPOWER, 0);  
    HWND為應該程序句柄。
      

  22.   

    不好意思﹐錯了﹐應該是﹕
    SendMessage(WM_SYSCOMMAND, SC_MONITORPOWER, 0);  
      

  23.   


    To gxh():
      这位兄弟手段高明啊!佩服
      

  24.   

    gxh的方法正确我试过了,LPRARM为1可以进入省电模式,2可以关闭显示器。
    jifeng,还有一个问题是不是。
      

  25.   

    给分太早了!你那个第二个问题,关于vb的那个,其实由个很简单的方法可以解决:
    首先把控件放到一个Form上,
    得到 ACTIVEX control的hwnd,然后SetParent到你那个CreateWindowEx的窗口上。如果你无法得到hwnd, 可以先放一个 pictureBox在form上,然后把activex ctrl放picturebox上,然后ChildWindowFromPoint或者EnumChildWindows什么的都能得到hwnd
    再把picturebox.visible=false就ok了如何?简单吧?为什么给分那么快 :(
      

  26.   

    给分太早了!你那个第二个问题,关于vb的那个,其实由个很简单的方法可以解决:
    首先把控件放到一个Form上,
    得到 ACTIVEX control的hwnd,然后SetParent到你那个CreateWindowEx的窗口上。如果你无法得到hwnd, 可以先放一个 pictureBox在form上,然后把activex ctrl放picturebox上,然后ChildWindowFromPoint或者EnumChildWindows什么的都能得到hwnd
    再把picturebox.visible=false就ok了如何?简单吧?为什么给分那么快 :(
      

  27.   

    TrackPopupMenu()有一个参数TPM_LBUTTON(大概),将他chang to TPM_RBUTTON,粽子把left-->right 就ok了