質問: createwindow(szclassnme, "タイトルバーのないウィンドウ", //タイトルバーに表示されます ws_popup, //ウィンドウの種類 250,//x座標 250,//y座標 500,//幅 160,//高さ null, //親ウィンドウのハンドル、親を作るときはnull null, //メニューハンドル、クラスメニューを使うときはnull hinst, //インスタンスハンドル &commondata); //■そしてwindowを制御する以下の関数の中で lresult callback wndproccommonerrorwindow(hwnd hwnd, uint message, wparam wparam, lparam lparam) { p_commondata common_data; switch (message) { case wm_initdialog: common_data=(p_commondata)lparam; #ifdef _win64 setwindowlongptr(hwnd,dwlp_user,(long_ptr)common_data); #else setwindowlong(hwnd,dwl_user,(long)common_data); #endif wsprintf(finaloutput,"%d-%d-%d",common_data->errorkind,common_data->errorpoint,common_data->errorvariation); messagebox(null,finaloutput,"file error",mb_ok); break; としても、値がゴミデータがはいってしまっているというか正しく表示できません。 本来ならば、100-123-456と表示されるのが目的です。 データの受け渡しのところで失敗しているのはなんとなくわかるのですが、どのようにすればlparamに受け渡して、それを取得できるのか分かりません。 どなたかご教授ご指導願いますm(____)m *実際にwindowは出ます。 myprog.style =cs_hredraw | cs_vredraw|cs_dblclks; myprog.lpfnwndproc =wndproccommonerrorwindow; myprog.cbclsextra =0; myprog.cbwndextra =0; myprog.hinstance =commonclass.getinstance(); myprog.hicon =null; myprog.hcursor =loadcursor(null, idc_arrow); myprog.hbrbackground =(hbrush)getstockobject(white_brush); myprog.lpszmenuname =null; myprog.lpszclassname =szclassnme; などの処理は間違いないはずです。 }
回答: こんにちは。御礼頂きました。 32ビット迄のデータなら何でも良いです(win32の場合)。 「wm_createを通過した後、構造体のポインタが手元に無いから操作出来ない」と言う事でしょうか。 でしたら、setwindowlongptr()でhwndに向かって構造体のポインタを入れたのですから、使用する時にはgetwindowlongptr()でhwndからポインタを取り出せば良いのです。 http://msdn.microsoft.com/ja-jp/library/cc364762.aspx //例えば、マウスが動いた時に、 case wm_mousemove: { //取り出す p_commondata common_data = (p_commondata)getwindowlongptr(hwnd, gwlp_userdata); //構造体ならば、メンバ変数を使用する等 wsprintf(finaloutput,"%d-%d-%d",common_data->errorkind,common_data->errorpoint,common_data->errorvariation); //クラスならば、メンバ関数を呼び出す等 common_data->callmousemove(/*パラメータ*/); break; }