新規作成ウインドウにデータを持たせるには

[戻る]
K 2006/10/30(月) 18:01:14
Kと申します.よろしくお願いします.

VC6.0,SDKでプログラムを作成しています.

メインのウインドウから,新たなウインドウを作成しているのですが,そのときに新た
なプロシージャにデータのポインタを持たせたいです.

ダイアログボックスをメインウインドウから作成した場合,API関数のDialogBoxParamの
第5引数である,LPARAM dwInitParamにポインタを持たせる方法があるのを知りました.

ダイアログでなく,ウインドウを作成する際にポインタを持たせる方法をはあります
か?

よろしくお願いいたします.

YuO [E-Mail] 2006/10/30(月) 18:10:27
CreateWindowにそのための引数,lpParamがあります。
http://windowssdk.msdn.microsoft.com/en-us/library/ms632679.aspx

WM_CREATEでlParamにCREATESTRUCTへのポインタがLPARAMにキャストされて渡されてきま
す。
そして,CREATESTRUCT::lpCreateParamsが目的の値になります。

K 2006/10/30(月) 21:58:46
YuOさん,ありがとうございます.

色々,試行錯誤したのですが,うまくいきません.ソースを載せますので,どこが間違
っているか,ご指摘いただけないでしょうか?

//メインのプロシージャ内のウインドウの作成

hWnd = CreateWindow( Class_Name,
                     ・,
                     ・中略
                     ・
        CS );                        
                // WM_CREATE情報

K 2006/10/30(月) 22:06:55
上は間違えて送信してしまいました.
改めて,

YuOさん,ありがとうございます.

色々,試行錯誤したのですが,うまくいきません.ソースを載せますので,どこが間違
っているか,ご指摘いただけないでしょうか?よろしくお願いします.


メインでiのポインタを入れて,新しいウインドウのWM_CREATEでiのポインタを受け取る
プログラム

//メインのプロシージャ内のウインドウの作成
CREATESTRUCT *CS
int i=5;

CS->lpCreateParams = &i;

hWnd = CreateWindow( Class_Name,
                     ・
                     ・中略
                     ・
                     CS );          // WM_CREATE情報


//新しいウインドウのプロシージャ内のWM_CREATE(受け取る方)
case WM_CREATE:
{
    CREATESTRUCT *CS;
    int  *i;            

    CS = (CREATESTRUCT*)lParam;
    i = (int*)CS->lpCreateParams;

      ・ 
      ・ 
      ・
      ・

YuO [E-Mail] 2006/10/30(月) 22:13:13
CREATESTRUCTは,WM_CREATEから受け取るときのみに使われます。
CreateWindowには,渡したいポインタをそのまま指定します。

K 2006/10/30(月) 22:27:46
ありがとうございます.

//メインのプロシージャ内のウインドウの作成
int i=5;

hWnd = CreateWindow( Class_Name,
                     ・
                     ・中略
                     ・
                     (LPVOID)&i );          // WM_CREATE情報


//新しいウインドウのプロシージャ内のWM_CREATE(受け取る方)
case WM_CREATE:
{
    int  *i;            

    i = (int*)lParam;

という風に理解し,変更しました.しかし,これもうまくいきません.

YuO [E-Mail] 2006/10/30(月) 23:12:41
CreateWindowには渡したいポインタをそのまま渡し,WM_CREATEへの応答では
CREATESTRUCT::lpCreateParamsで取得します。


提示したMSDNとか,そこのリンクとかを読みましたか?

CreateWindow Function ()
http://windowssdk.msdn.microsoft.com/en-us/library/ms632679.aspx
> Pointer to a value to be passed to the window through the CREATESTRUCT 
structure (lpCreateParams member) pointed to by the lParam param of the 
WM_CREATE message.

WM_CREATE Notification ()
http://windowssdk.msdn.microsoft.com/en-us/library/ms632619.aspx
lParam
> Pointer to a CREATESTRUCT structure that contains information about the 
window being created.

K 2006/10/31(火) 00:02:03
[[解決]]
ありがとうございます.
できました.

英語が読めないんで,すみません.

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