< ヘキサダンプクラス | tolerance >

March 25, 2009

(編集中)

#ifndef __INPUTBOX__H
#define __INPUTBOX__H

int InputBox (HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, LPTSTR lpszBuffer, DWORD dwBufferSize);

#endif    //__INPUTBOX__H

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

typedef struct InputBoxParam
{
    LPCTSTR lpszTitle;
    LPCTSTR lpszPrompt;
    LPTSTR lpszBuffer;
    DWORD cBuffer;
} INPUTBOXPARAM, *LPINPUTBOXPARAM;


INT_PTR CALLBACK DialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    UINT len = 0;
    LPINPUTBOXPARAM pParam = NULL;

    switch (uMsg)
    {
    case WM_INITDIALOG:
        if (lParam)
        {
            pParam = reinterpret_cast <LPINPUTBOXPARAM> (lParam);
            SetWindowText (hwndDlg, pParam->lpszTitle);
            SetDlgItemText (hwndDlg, IDC_STATIC_PROMPT, pParam->lpszPrompt);
            SetDlgItemText (hwndDlg, IDC_EDIT_INPUTBOX, pParam->lpszBuffer);
            SetProp (hwndDlg, _T ("InputBoxParam"), reinterpret_cast <HANDLE> (lParam));
        }
        break;

    case WM_COMMAND:
        switch (LOWORD (wParam))
        {
        case IDOK:
            pParam = reinterpret_cast <LPINPUTBOXPARAM> (GetProp (hwndDlg, _T ("InputBoxParam")));
            if (pParam)
            {
                len = GetDlgItemText (hwndDlg, IDC_EDIT_INPUTBOX, pParam->lpszBuffer, pParam->cBuffer);
            }
            EndDialog (hwndDlg, len);
            break;

        case IDCANCEL:
            EndDialog (hwndDlg, 0);
            break;

        case IDC_EDIT_INPUTBOX:
            {
                WORD notify = HIWORD (wParam);
                if (EN_SETFOCUS == notify)
                {
                    HWND hControl = GetDlgItem (hwndDlg, IDC_EDIT_INPUTBOX);
                    SendMessage (hControl, EM_SETSEL, (WPARAM) 0, (LPARAM) -1);
                }
            }
            break;
        default:
            break;
        }
        break;
    }
    return 0;
}

int InputBox (HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, LPTSTR lpszBuffer, DWORD dwBufferSize)
{
    INPUTBOXPARAM Param;
    ZeroMemory (&Param, sizeof (INPUTBOXPARAM));
    Param.lpszTitle = lpCaption;
    Param.lpszPrompt = lpText;
    Param.lpszBuffer = lpszBuffer;
    Param.cBuffer = dwBufferSize;

    INT_PTR result = DialogBoxParam ((HINSTANCE) GetModuleHandle (NULL), (LPCTSTR) IDD_INPUTBOX, NULL, DialogProc, reinterpret_cast<LPARAM> (&Param));

    return result;
}
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_INPUTBOX DIALOGEX 0, 0, 274, 62
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,203,7,64,14
    PUSHBUTTON      "キャンセル",IDCANCEL,203,23,64,14
    LTEXT           "スタティック",IDC_STATIC_PROMPT,7,7,191,30
    EDITTEXT        IDC_EDIT_INPUTBOX,7,43,260,12,ES_AUTOHSCROLL
END
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by getpath.rc
//
#define IDD_INPUTBOX                    101
#define IDC_STATIC_PROMPT               1001
#define IDC_EDIT_INPUTBOX               1002

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1003
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

トラックバック

このエントリーにトラックバック:
http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/2354

コメント

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?