直接作成したコントロールのデフォルトプッシュボタンについて

[戻る]
ねこ 2005/06/26(日) 20:07:54
WindowsXP VC++.NET 2003 で開発しております。
2回目の質問になりますが、よろしくお願いします。

テンプレートを使わずにコントロールを2つ直接作成しました。
1つはエディットボックスで、もう1つはボタンです。

エディットボックスでENTERキーを押せば、自動的にボタンを押す、
というのを実装したいと思っています。
ボタンのスタイルには、BS_DEFPUSHBUTTON を設定したのですが、
ENTERキーを押してもボタンを押したことにはなりません。

リソースを使わず、これを実装する方法はありますでしょうか。

以下にソースの1部を書きます。


//-----WinMain----------
INT APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, INT 
nCmdShow )
{
.
...
....
    WNDCLASSEX wc;

    wc.cbSize = sizeof(WNDCLASSEX); 
    wc.style = NULL;
    wc.lpfnWndProc = WinProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = DLGWINDOWEXTRA;
    wc.hInstance = hInst;
    wc.hIcon = NULL;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); 
    wc.lpszMenuName = NULL;
    wc.lpszClassName = szWinName; 
    wc.hIconSm = NULL; 

    if (!RegisterClassEx(&wc)) return (FALSE);

    hWnd = CreateWindowEx(0,
        szWinName,
        szWinTitle,
        WS_OVERLAPPEDWINDOW|WS_SYSMENU,
        0,
        0,
        SCREEN_WIDTH,
        SCREEN_HEIGHT,
        NULL,
        NULL,
        hInst,
        NULL
    );

    ShowWindow(hWnd, nWinMode);
    UpdateWindow(hWnd);
.
...
....

    while(GetMessage(&msg,NULL,0,0))
    {
        if(!IsDialogMessage(hWnd,&msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
.
...
....


//-----ウインドウプロシージャ-------

LRESULT CALLBACK WinProc(HWND hWnd, UINT msg, WPARAM wPa, LPARAM lPa)
{

.
...
....


    case WM_CREATE:

        /* テキスト入力ボックスを作成 */
        hTextbox=CreateWindowEx(0, "EDIT","",
                         WS_CHILD | ES_MULTILINE | WS_VSCROLL 
|WS_GROUP|WS_TABSTOP|WS_VISIBLE,
                         0, 0, 0, 0,
                         hWnd,
                         (HMENU)2,
                         (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), NULL);

    /* 送る ボタンを作成 */
        hButton=CreateWindowEx(0, "BUTTON","送る",
                         
WS_CHILD|WS_GROUP|WS_TABSTOP|WS_VISIBLE|BS_DEFPUSHBUTTON,
                         0, 0,128, 32,
                         hWnd,
                         (HMENU)ID_BTN,
                         (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), NULL);

        break;

.
..
...


    case WM_SIZE:
          MoveWindow(hButton, LOWORD(lPa)-70,
                                 HIWORD(lPa)-36,64, 32, TRUE);
          MoveWindow(hTextbox, 5, HIWORD(lPa)*0.77+10,
                                 LOWORD(lPa)-80, HIWORD(lPa)-HIWORD(lPa)*0.77-
15, TRUE);
    break;

.
..
...

    default:
    return DefWindowProc(hWnd, msg, wPa, lPa);

.
..
...
//---------------

この機能を実装すれば、作りたいプログラムがひとまず完成します。。
アドバイスがありましたら、よろしくお願いいたします。

dairygoods 2005/06/27(月) 09:27:24
DM_SETDEFIDで設定します。

ねこ 2005/06/27(月) 17:56:59
[[解決]]
dairygoods様
DM_SETDEFIDを使い、デフォルトプッシュボタンを作ることができました。
的確なアドバイスありがとうございました。
やはり直接書くのは大変なので、リソースのほうも勉強したいとおもいます。

ねこ 2005/06/27(月) 17:57:00
[[解決]]
dairygoods様
DM_SETDEFIDを使い、デフォルトプッシュボタンを作ることができました。
的確なアドバイスありがとうございました。
やはり直接書くのは大変なので、リソースのほうも勉強したいとおもいます。

古いスレッドには追加発言できません。