3

メインプログラムの呼び出し時にhInstance変数に保存するHMODULEを取得するDLLで定義されたInputBoxを開くためのこのコードがあります。メイン プログラム ウィンドウの中央に配置するにはどうすればよいですか? 動作しないことが発生し、画面の左上またはプログラム ウィンドウの左上に DialogBox がランダムに表示されます。

#include <windows.h>
#include "resource.h"

char IB_res[10];
double defaultValue = 0;
BOOL CALLBACK InputBox_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
    case WM_INITDIALOG:
        if (defaultValue != -1)
            SetDlgItemText(hwnd, IDC_EDIT, (LPCSTR)(my_printf("%f", defaultValue).c_str()));
        else
            SetDlgItemText(hwnd, IDC_EDIT, (LPCSTR)"");
        return TRUE;
    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case IDOK:
            if (!GetDlgItemText(hwnd, IDC_EDIT, IB_res, 10))
                *IB_res = 0;
        case IDCANCEL:
            EndDialog(hwnd, wParam);
            break;
        }
        break;
    default:
        return FALSE;
    }
    return TRUE;
}

DWORD processId;
HWND hwndParent;
BOOL CALLBACK enumWindowsProc(HWND hwnd, LPARAM lParam)
{
    DWORD procid;
    GetWindowThreadProcessId(hwnd, &procid);
    if (procid == processId)
        hwndParent = hwnd;
    return TRUE;
}

HINSTANCE hInstance;
const char* InputBox(double def_value)
{
    defaultBetValue = def_value;
    processId = GetCurrentProcessId();
    EnumWindows(enumWindowsProc, 0);
    INT_PTR ret = DialogBox(hInstance, MAKEINTRESOURCE(IDD_IB), hwndParent, InputBox_WndProc);
    DWORD error = GetLastError();
    if (ret != IDOK)
        *IB_res = 0;

    return IB_res;
}
4

1 に答える 1