開発環境はvc++ 2010 expressです。
猫でもわかるWindowsプログラミング第2版を
読んでいます。
リソースファイルを作成し
ダイアログボックスをいじろうと
しているのですが、408Pの手順では
作成出来なくなっています。
ご助力の程、よろしくお願いします。
vc++2010でリソースファイルを作成したい
Re: vc++2010でリソースファイルを作成したい
Expressにはリソースエディタはついていませんのでrcファイルを直接編集するか
私は使ったことがありませんが、フリーソフトのResEditなどを使用する必要があります。
一応リンクを貼っておきますね。
ResEdit
http://www.forest.impress.co.jp/lib/std ... sedit.html
私は使ったことがありませんが、フリーソフトのResEditなどを使用する必要があります。
一応リンクを貼っておきますね。
ResEdit
http://www.forest.impress.co.jp/lib/std ... sedit.html
Re: vc++2010でリソースファイルを作成したい
沖 滉均様、ご返信ありがとうございます。
ResEditを使用してリソースファイルは作成出来ました。
現在デスクトップクロックを作成中です。
加筆修正を加えて右クリックでダイアログボックスを
表示させたいのですが、うまくいきません。
インスタンスハンドルがうまくいってないのでは
ないかと思っていますが。
ResEditを使用してリソースファイルは作成出来ました。
現在デスクトップクロックを作成中です。
加筆修正を加えて右クリックでダイアログボックスを
表示させたいのですが、うまくいきません。
インスタンスハンドルがうまくいってないのでは
ないかと思っていますが。
//resource.h
#ifndef IDC_STATIC
#define IDC_STATIC (-1)
#endif
#define IDD_DIALOG1 101
#define IDC_EDIT1 1002
#define IDC_EDIT2 1003
//sample.rc
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h"
//
// Dialog resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_DIALOG1 DIALOG 0, 0, 186, 95
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "Ms Shell Dlg"
{
DEFPUSHBUTTON "OK", IDOK, 33, 77, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 115, 77, 50, 14
EDITTEXT IDC_EDIT1, 5, 10, 16, 14, ES_AUTOHSCROLL
EDITTEXT IDC_EDIT2, 31, 10, 16, 14, ES_AUTOHSCROLL
LTEXT "Static", IDC_STATIC, 63, 40, 44, 15, SS_LEFT
}
//main.cpp
#include <windows.h>
#include "DxLib.h"
#include "dayData.h"
#include "draw_clock.h"
#include "Setup.h"
#include "resource.h"
#define APP_NAME TEXT("clock")
#define chara_width 64
void jihou(struct dayData* day);
void plan(struct dayData* day);
void Time(struct dayData* day);
void date(struct dayData* day);
void version(struct dayData* day);
int title(int,struct dayData* day);
HINSTANCE hInst;
BOOL CALLBACK MyDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp){
switch(msg){
case WM_COMMAND:
switch(LOWORD(wp) ){
case IDOK:
EndDialog(hDlg,IDOK);
return TRUE;
case IDCANCEL:
EndDialog(hDlg,IDCANCEL);
return TRUE;
}
return FALSE;
}
return FALSE;
}
LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
static int top = 0;
switch(uMsg) {
case WM_MOVING:
{
LPRECT p = (LPRECT)lParam;
top = p -> top;
break;
}
case WM_WINDOWPOSCHANGING:
{
WINDOWPOS* p = (WINDOWPOS*)lParam;
p -> y = top;
break;
}
case WM_NCHITTEST:
return HTCAPTION;
case WM_RBUTTONDOWN:
DialogBox( hInst, "IDD_DIALOG1", hWnd, (DLGPROC)MyDlgProc );
break;
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
hInst = hInstance;
struct dayData day[450];
// マウス状態管理用変数
int nClickNow = 0 , nClickPrev = 0;
int nClickNow_R = 0 , nClickPrev_R = 0;
int nClickR_Count = 0;
int status = 0,temp = 0;
bool menu_flg = false;
// 画面モードの変更
SetGraphMode( 1680 , 1050 , 32 ) ;//パソコンの解像度に合わせる
SetMainWindowText("clock");
ChangeWindowMode( TRUE );
SetUseBackBufferTransColorFlag( TRUE );// ウインドウの透過色モードON
SetWindowStyleMode(0);
SetAlwaysRunFlag( TRUE );
SetHookWinProc( WindowProc );
if ( DxLib_Init( ) == -1 ) return -1;
SetDrawScreen(DX_SCREEN_BACK);
Load_Graph();
Setup_load(day);//設定を読み込む
plan(day);//予定を音声再生する
int NewMouse = 0, OldMouse = GetMouseInput();
while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) {
//処理を省略
}
DxLib_End( );
return 0;
}
Re: vc++2010でリソースファイルを作成したい
#未確認ですが…
DialogBox( hInst, "IDD_DIALOG1", hWnd, (DLGPROC)MyDlgProc );
↓
DialogBox( hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, (DLGPROC)MyDlgProc );
じゃないでしょうか。
DialogBox( hInst, "IDD_DIALOG1", hWnd, (DLGPROC)MyDlgProc );
↓
DialogBox( hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, (DLGPROC)MyDlgProc );
じゃないでしょうか。
Re: vc++2010でリソースファイルを作成したい
DialogBox( hInst, "IDD_DIALOG1", hWnd, (DLGPROC)MyDlgProc );
IDD_DIALOG1は#defineで数値で定義されているだけで文字列を指定しても探してくることはできません。
解決方法は既にISLeさんが書かれている通りです。
IDD_DIALOG1は#defineで数値で定義されているだけで文字列を指定しても探してくることはできません。
解決方法は既にISLeさんが書かれている通りです。
オフトピック
詳細な解説は…私にはできません…
どなたか詳しい方がいましたらお願いいたしますm(__)m
どなたか詳しい方がいましたらお願いいたしますm(__)m
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: vc++2010でリソースファイルを作成したい
一応文字列で指定できるはずです。日頃VisualStudioのMFCでウィザード任せの人なので絶対大丈夫だとは言い切れませんが。
「第13章」 猫winより。
http://www.kumei.ne.jp/c_lang/sdk/sdk_13.htm
「第13章」 猫winより。
http://www.kumei.ne.jp/c_lang/sdk/sdk_13.htm
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: vc++2010でリソースファイルを作成したい
上記のページといくつかテキスト指定しているサイトを参照しつつ色々試してみたら、なぜかresource.hからIDD_DIALOG1の定義をコメントアウト(削除)したらテキストで指定しても表示されましたね。softya(ソフト屋) さんが書きました:一応文字列で指定できるはずです。日頃VisualStudioのMFCでウィザード任せの人なので絶対大丈夫だとは言い切れませんが。
「第13章」 猫winより。
http://www.kumei.ne.jp/c_lang/sdk/sdk_13.htm
内部的に何が行われているのかはさっぱりわかりませんが…
今回の解決方法はISLeさんが書かれている方法か、
resource.hから#define IDD_DIALOG1 101の定義を削除することで対応できそうです
どちらを選ぶかは…お任せ致します。
オフトピック
と、ここまで書いて思ったのだが*.rcの中も#defineでの置き換えが有効になっているのかな?
#define IDD_DIALOG1 101によって
IDD_DIALOG1 DIALOG 0, 0, 186, 95
↓
101 DIALOG 0, 0, 186, 95
となって…と考えて"101"にしてみたけどダメ…
リソーススクリプトの扱いがどうなっているのか気になる…
[追記]
置き換わっているのは置き換わっているらしい…
リソーススクリプトの仕様を確認する限り
nameID DIALOG x, y, width, height [optional-statements] {control-statement . . . }
nameID
Unique name or a unique 16-bit unsigned integer value that identifies the dialog box.
こう書かれているので16-bit unsigned intかユニークな名前ってことだし…
ただ、その置き換えが発生しない場合にはUnique name = textという扱いになるのかな?
#define IDD_DIALOG1 101によって
IDD_DIALOG1 DIALOG 0, 0, 186, 95
↓
101 DIALOG 0, 0, 186, 95
となって…と考えて"101"にしてみたけどダメ…
リソーススクリプトの扱いがどうなっているのか気になる…
[追記]
置き換わっているのは置き換わっているらしい…
リソーススクリプトの仕様を確認する限り
nameID DIALOG x, y, width, height [optional-statements] {control-statement . . . }
nameID
Unique name or a unique 16-bit unsigned integer value that identifies the dialog box.
こう書かれているので16-bit unsigned intかユニークな名前ってことだし…
ただ、その置き換えが発生しない場合にはUnique name = textという扱いになるのかな?
Re: vc++2010でリソースファイルを作成したい
nameID DIALOG ~
に対して
#resource.hのマクロ置換が行われて、
コンパイル時にnameIDが(アルゴリズムは不明ですが)整数値に変換できないとき文字列とみなされるようです。
ResEditではリソースペインのリソースアイテムの右クリックメニューで『名前の変更』を選ぶと連番か名前のどちらか切り替えることができます。
名前を選ぶとresource.hの置換マクロが生成されません。
ただし名前を選んでも整数値に変換できる名前だとコンパイル時に数値とみなされてしまいます。
VisualStudioのリソースエディタではリソースIDをダブルクォーテーションで囲んで入力すると文字列とみなされたと記憶しています。
こちらもresource.hの置換マクロが生成されないだけなので整数値に変換できる名前だと数値とみなされるはずです。
IDD_DIALOG1という文字列を使うと、ダイアログリソースを追加したときにカブる可能性があるので気を付けてください。
数値に変換される名前で数値を直接設定できるわけですが、保守性を落とすのですべきではないと思います。
に対して
#resource.hのマクロ置換が行われて、
コンパイル時にnameIDが(アルゴリズムは不明ですが)整数値に変換できないとき文字列とみなされるようです。
ResEditではリソースペインのリソースアイテムの右クリックメニューで『名前の変更』を選ぶと連番か名前のどちらか切り替えることができます。
名前を選ぶとresource.hの置換マクロが生成されません。
ただし名前を選んでも整数値に変換できる名前だとコンパイル時に数値とみなされてしまいます。
VisualStudioのリソースエディタではリソースIDをダブルクォーテーションで囲んで入力すると文字列とみなされたと記憶しています。
こちらもresource.hの置換マクロが生成されないだけなので整数値に変換できる名前だと数値とみなされるはずです。
IDD_DIALOG1という文字列を使うと、ダイアログリソースを追加したときにカブる可能性があるので気を付けてください。
数値に変換される名前で数値を直接設定できるわけですが、保守性を落とすのですべきではないと思います。
Re: vc++2010でリソースファイルを作成したい
ISLe様、softya(ソフト屋)様もご返信ありがとうございます。
無事に解決しました。
今回もありがとうございます。
無事に解決しました。
今回もありがとうございます。