效果参见win操作系统附件中自带的屏幕虚拟键盘,你在点击那个屏幕虚拟键盘的时候发现
那个键盘程序无论在点击前后始终都没有得到焦点,而后面输入键盘字符的窗口也始终没
有得到焦点。
想做出这种效果,尝试了N种方法都没有能够如愿,真不知道微软写那个虚拟键盘的家伙是
怎么做出这种效果来的。就像那个输入法工具栏一样,我点击了它,实际上的当前活动窗口的状态并不改变的。望大虾们指教啊、、、

解决方案 »

  1.   

    我现在要在那个界面上点击button,但是点击后并不使得当前界面获得焦点,就像输入法程序的浮动的工具栏一样。另外,哪些控件是不能得到焦点的,请问?
      

  2.   

    使窗口具有  WS_EX_NOACTIVATE 属性就不会获得焦点了。这个就是你想要的,当初我也给这个搞头疼了。#include <windows.h>#define WS_EX_NOACTIVATE 0x08000000L  //无焦点
    #include <tchar.h>HWND CreateWnd();int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

    //create window
    if ( !CreateWnd() )
    return false; MSG msg;
    while(GetMessage(&msg,NULL,0,0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    return msg.wParam ;
    }LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
    {
    switch(message)
    {
    case WM_CLOSE:
    DestroyWindow(hWnd);//既关闭按钮,可以在此时询问用户是否确定要关闭,再调用DestroyWindow关闭程序
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hWnd,message,wParam,lParam);
    }
    return 0;
    }
    HWND CreateWnd()
    {
    WNDCLASS wndcls;
    wndcls.cbClsExtra  = 0;
    wndcls.cbWndExtra  = 0;
    wndcls.lpszMenuName  = NULL;
    wndcls.hInstance  = NULL;
    wndcls.style  = NULL/*CS_HREDRAW|CS_VREDRAW*/;
    wndcls.hCursor  = LoadCursor(NULL,IDC_ARROW);
    wndcls.lpszClassName = _T("Win32");
    wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndcls.hIcon  = NULL;
    wndcls.lpfnWndProc  = WndProc; if (!RegisterClass(&wndcls))
    return NULL; HWND hWnd = CreateWindowEx(WS_EX_TOPMOST|WS_EX_NOACTIVATE,
    _T("Win32"),
    _T("Demo"),
    WS_OVERLAPPEDWINDOW,
    225,160,400,400,NULL,NULL,NULL,NULL) ; if (!hWnd)
    return NULL;
       
    ShowWindow(hWnd,SW_SHOWNORMAL);
    UpdateWindow(hWnd); return hWnd;
    }