1

私のプロジェクトは、DLL を返すコンソール アプリケーションです。別のプロジェクトでも使用しています。

このプロジェクトはWFSメソッドを使用しています。これらのメソッドの 1 つでHWND、パラメーターとして渡す必要があります。その理由は、メソッドがメッセージ (私の場合はイベント) を送信したいときはいつでも、 this を使用するからHWNDです。

最初にこれを試しました:

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
    case WFS_EXECUTE_EVENT: 
    case WFS_SERVICE_EVENT: 
    case WFS_USER_EVENT: 
    case WFS_SYSTEM_EVENT:
        return S_OK;
    }
    return DefWindowProc(hWnd, msg, wParam, lParam );
}


HWND create(HWND parent) 
{
    HINSTANCE inst =  GetModuleHandle (0);
    WNDCLASSEX wincl;

    wincl.hInstance = inst;
    wincl.lpszClassName = TEXT("ConsoleClass");
    wincl.lpfnWndProc = WndProc;    

    HWND mainWindow = CreateWindow( 
        TEXT("DM_Class_Name"),       
        TEXT("DM_Title"),            
        WS_OVERLAPPEDWINDOW, 
        CW_USEDEFAULT,      
        CW_USEDEFAULT,      
        CW_USEDEFAULT,       
        CW_USEDEFAULT,     
        (HWND) NULL,         
        (HMENU) NULL,       
        inst,                
        (LPVOID) NULL);      

    ShowWindow(mainWindow,1);

    return mainWindow;

}

何らかの理由で機能していません。ウィンドウは表示されず、HWND は常にNULL.

なぜ機能しないのですか?

数時間検索した後、試しましたQDialog

QDialog dialog;
dialog.setObjectName("Device_Manager_Dialog");
dialog.setWindowTitle("Device Manager");
dialog.setFixedWidth(10);
dialog.setFixedHeight(10);
dialog.show();
dialog.setVisible(false);
QWidget * widget = dialog.window();
HWND windows_handle = widget->effectiveWinId();

こんな感じで動いています。ウィンドウと HWND を作成し、クラスでこれを使用する必要がありますHWND

次の行を呼び出して取得します。

windows_handle = FindWindow(0, TEXT("Device Manager"));

を使用したい場合、メソッドが送信するメッセージを取得するにqdialogはどうすれWndProcqdialogよいですか?widgetWFS

4

1 に答える 1