ダイアログボックスの文字入力について
Posted: 2007年12月19日(水) 13:34
現在、ダイアログボックスを用いて文字入力を行い、入力された文字をDrawFormatString関数で描画したいと考えておりますが、上手く出来ません。何か方法はございませんが?
念のため現在作っているプログラムの一部を添付させていただきます。
一応コンパイルまでは出来るんですが、ダイアログボックスに文字、数字を入力し、OKをクリックするとアプリケーションエラーになってしまいます。
おそらく、***で囲まれた部分の定義がおかしいと思い調べましたが、事故解決には至りませんでした。
コンパイラはBCC Developerを使っています。
よろしくお願いいたします。
↓これが、リソースファイルです。
#include <windows.h>
#include "dlgbox.h"
DLGBOX DIALOGEX 300, 300, 100, 70
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "名前と大きさの入力"
FONT 12, "MS 明朝"
BEGIN
EDITTEXT IDC_FAIL1,60,12,20,15,ES_AUTOHSCROLL
EDITTEXT IDC_FAIL2,60,30,20,15,ES_AUTOHSCROLL
LTEXT "名前",IDC_STATIC,18,12,17,8
LTEXT "大きさ",IDC_STATIC,17,30,17,8
DEFPUSHBUTTON "OK",IDOK,7,49,50,14
PUSHBUTTON "終了",IDCANCEL,129,49,50,14
END
※ファイル名はdlgbox.rc
↓次にヘッダファイルです。
#define IDC_FAIL1 1001
#define IDC_FAIL2 1002
※ファイル名はdlgbox.h
そして、本体です。
#include <windows.h>
#include "dlgbox.h"
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM , Boy *boy);
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{
DialogBox(hCurInst, "DLGBOX", NULL, (DLGPROC)DlgProc);
return 0;
}
BOOL CALLBACK MyDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam , Boy *boy)
{
char boy[256],ookisa[128],namae[128];
switch (msg )
{
case WM_INITDIALOG: //ダイアログボックスの初期化
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK://OKボタンが押されたら
GetDlgItemText(hDlg, IDC_FAIL1, namae, (int)sizeof(namae));
//hDlgで指されるバッファにテキストをコピーし、コピーしたバイト数を返します
GetDlgItemText(hDlg, IDC_FAIL2, ookisa, (int)sizeof(ookisa));
wsprintf(boy, "名前を%sに、大きさを%sに変更しました", namae, ookisa);
MessageBox(hDlg, boys, "変更したぷぃ(>o<)b", MB_OK);
************************************************
* strcpy(boy->name,namae); *
* boy->value[64] = ookisa[64]; *
************************************************
DrawFormatString(8,7,Yellow,"name : %s",boy->name);
DrawFormatString(8,15,Yellow,"value : %d",boy->value);
EndDialog(hDlg, IDOK); //ダイアログボックスの破棄
return TRUE;
}
return FALSE;
}
return FALSE;
}
※ファイル名はdlgbox.cppです。
念のため現在作っているプログラムの一部を添付させていただきます。
一応コンパイルまでは出来るんですが、ダイアログボックスに文字、数字を入力し、OKをクリックするとアプリケーションエラーになってしまいます。
おそらく、***で囲まれた部分の定義がおかしいと思い調べましたが、事故解決には至りませんでした。
コンパイラはBCC Developerを使っています。
よろしくお願いいたします。
↓これが、リソースファイルです。
#include <windows.h>
#include "dlgbox.h"
DLGBOX DIALOGEX 300, 300, 100, 70
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "名前と大きさの入力"
FONT 12, "MS 明朝"
BEGIN
EDITTEXT IDC_FAIL1,60,12,20,15,ES_AUTOHSCROLL
EDITTEXT IDC_FAIL2,60,30,20,15,ES_AUTOHSCROLL
LTEXT "名前",IDC_STATIC,18,12,17,8
LTEXT "大きさ",IDC_STATIC,17,30,17,8
DEFPUSHBUTTON "OK",IDOK,7,49,50,14
PUSHBUTTON "終了",IDCANCEL,129,49,50,14
END
※ファイル名はdlgbox.rc
↓次にヘッダファイルです。
#define IDC_FAIL1 1001
#define IDC_FAIL2 1002
※ファイル名はdlgbox.h
そして、本体です。
#include <windows.h>
#include "dlgbox.h"
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM , Boy *boy);
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{
DialogBox(hCurInst, "DLGBOX", NULL, (DLGPROC)DlgProc);
return 0;
}
BOOL CALLBACK MyDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam , Boy *boy)
{
char boy[256],ookisa[128],namae[128];
switch (msg )
{
case WM_INITDIALOG: //ダイアログボックスの初期化
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK://OKボタンが押されたら
GetDlgItemText(hDlg, IDC_FAIL1, namae, (int)sizeof(namae));
//hDlgで指されるバッファにテキストをコピーし、コピーしたバイト数を返します
GetDlgItemText(hDlg, IDC_FAIL2, ookisa, (int)sizeof(ookisa));
wsprintf(boy, "名前を%sに、大きさを%sに変更しました", namae, ookisa);
MessageBox(hDlg, boys, "変更したぷぃ(>o<)b", MB_OK);
************************************************
* strcpy(boy->name,namae); *
* boy->value[64] = ookisa[64]; *
************************************************
DrawFormatString(8,7,Yellow,"name : %s",boy->name);
DrawFormatString(8,15,Yellow,"value : %d",boy->value);
EndDialog(hDlg, IDOK); //ダイアログボックスの破棄
return TRUE;
}
return FALSE;
}
return FALSE;
}
※ファイル名はdlgbox.cppです。