えと、はじめまして秋桜というものです。今現在VC++.netを使用しSDKベースで開発を
しているのですが、クライアント領域にダイアログが貼り付けたみたいになる現象に
非常に悩まされております。なぜこのようなことがおこるのかご助言いただけると
とても助かります。
ちなみにダイアログを表示するのに関係していると思われるソースの一部分を貼り
付けておきます。
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs,
int nWinMode){
・・・
hInst = hThisInst;
...
}
LRESULT CALLBACK WinProc(HWND hwnd, UINT msg,WPARAM wP, LPARAM lP){
...
switch(msg) {
case WM_COMMAND:
switch(LOWORD(wP)){
case ID_CONECT:
DialogBox(hInst,IDD_CONECT,hwnd,(DLGPROC)ServerConectProc);
break;
...
といった感じです。よろしくお願いいたします。
ダイアログの位置って事なのでしょうか?
だとしたらリソースで指定するか、ダイアログ関数のWM_INITDIALOGでMoveWindow()
すればOKかと。
一応ダイアログのリソース部分も表示した方がアドバイスしやすいと思います。
ダイアログのスタイルとかわかりませんし。
スタイルにWS_POPUPがないのでは?
えっと、お返事ありがとうございます。私の説明が足らずどのような現象なのか
よくわかってもらえてないようなので詳しくさらに詳しく説明したいと思います。
えっと、アプリケーションのクライアント領域にダイアログの内容をベターって
貼り付けたみたいになっているんです。きちんとダイアログの機能は果たしますし
必要な内容があるのですが、的確に表現するなら「別窓で開いてくれない」という
表現が一番しっくり来るのかもしれません。ダイアログは普通別窓で開くと思って
いたのですが・・・、どこにどのような値を与えればあのようになるのか、とても
謎です・・・、
SunPac様
>ダイアログのリソース部分も表示した方がアドバイスしやすいと思います。
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_getHTML DIALOGEX 0, 0, 327, 83
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION Dialog
FONT 8, MS Shell Dlg, 400, 0, 0x1
BEGIN
DEFPUSHBUTTON OK,IDOK,103,51,50,14
PUSHBUTTON キャンセル,IDCANCEL,173,51,50,14
EDITTEXT IDC_EDIT_URL,47,25,254,16,ES_AUTOHSCROLL
LTEXT URL,IDC_STATIC,25,28,20,13
END
#endif // 日本語 resources
/////////////////////////////////////////////////////////////////////////////
この部分でいいのでしょうか?間違っていたら指摘のほどよろしくお願いいたします。
dairygoods様
>スタイルにWS_POPUPがないのでは?
えっと、勉強が足らなくて申し訳ないのですがスタイルとは何なのでしょうか?
よくわからないのでなんとも返事ができずもうしけございません。
ちゃんとWS_POPUPはついていますよ、ご安心を。
> STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
~~~~~~~~
この設定で
> DialogBox(hInst,IDD_CONECT,hwnd,(DLGPROC)ServerConectProc);
なら普通にモーダルダイアログが出ます。
貼り付けたみたい…
ん~、もしかして親ウィンドウがクリックしても反応しないことを言っていますか?
それであっているなら DialogBox() を CreateDialog() に変えればいいです。
関数の引数は変えなくていいですが、ダイアログの Visible のプロパティを TRUE を
設定する必要があります。
>的確に表現するなら「別窓で開いてくれない」という表現が
子ウィンドウの設定もないし、そもそもこのダイアログの作り方ではそうはならないは
ず…う~ん???
> DialogBox(hInst,IDD_CONECT,hwnd,(DLGPROC)ServerConectProc);
ここでは、IDD_CONECT、
> IDD_getHTML DIALOGEX 0, 0, 327, 83
ここでは、IDD_getHTML
と、リソースIDが異なりますが、
写し間違いなのか、
違うものを見ているのか、
そういう風にマクロが定義してあるのか、
どうなんでしょう?
>> DialogBox(hInst,IDD_CONECT,hwnd,(DLGPROC)ServerConectProc);
>
>ここでは、IDD_CONECT、
>
>> IDD_getHTML DIALOGEX 0, 0, 327, 83
>
>ここでは、IDD_getHTML
>と、リソースIDが異なりますが、
うわ、そっちのほう気にしてなかった
マクロが定義してあってもIDが割り付けてないとダイアログは出ないし、
貼り付けた…、別窓で…、うーむ、
他にダイアログが定義してあるとか、ってのはないですよね?>秋桜さん
# 自宅で見たら上の書き込みも位置がずれてるし
# もう少し落ち着かないと。。。
あう><、申し訳ありません・・・、貼り付けるそれを間違ったみたいです・・・、
改めてリソースを張りなおさせていただきます。(大して変わりませんが・・・、)
//
// Dialog
//
IDD_CONECT DIALOGEX 0, 0, 174, 82
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION Dialog
FONT 8, MS Shell Dlg, 400, 0, 0x1
BEGIN
DEFPUSHBUTTON OK,IDOK,29,53,50,14
PUSHBUTTON キャンセル,IDCANCEL,94,52,50,14
EDITTEXT IDC_EDIT1,38,25,124,16,ES_AUTOHSCROLL
LTEXT 接続先,IDC_STATIC,10,28,26,9
END
それと文字でも説明ではいまいち現象が説明しきれないようなのでここは百聞は一見に
しかず、ということで画像をアップいたしました。よろしかったら見てやってくださ
い。
何度も何度もお手数をおかけします。よろしくお願いいたします。
どのリンク先も開けないですー。
> どのリンク先も開けないですー。
DDNSのようなので……
対象マシンが起動していないかDDNSへのIP更新がされていないか……
と思われます。
# パケットフィルタされていたりして?
ServerConectProc関数の方は問題ないでしょうか?
[DialogProc]
http://www.microsoft.com/japan/msdn/library/ja/jpwinui/html/_win32_dialogproc.asp
解説にあるような一連の注意事項に従っていますか?
> ServerConectProc関数のWM_INITDIALOGの中の処理が気になります。
おっと、違った。
これは気にしなくていいです。
画面を見て疑問が出たのでまずは質問、
1.CreateWindow は親ウィンドウ(RecvWindow)の生成以外に使っていますか?
2.親ウィンドウはマウスでクリックすると、どう反応しますか?
(タイトルバーが点滅するとか)
3.
> 他にダイアログが定義してあるとか、ってのはないですよね?>秋桜さん
こっちも念のため聞いておきます。
CreateWindowで1つづつ親ウィンドウに配置したみたいでかなり驚きました。
# 混乱してます orz
いろいろとお返事ありがとうございます。質問への返答をさせていただきます。
>鷲尾不徳様
>ServerConectProc関数のWM_INITDIALOGの中の処理が気になります。
えと、以下のような感じになります。WM_INITDIALOGでは特に何も処理していません。
やっぱり何かやってやらないと問題ありなのでしょうか?
#include <windows.h>
BOOL CALLBACK ServerConectProc(HWND hWnd,UINT msg,WPARAM wP,LPARAM lP){
switch(msg){
case WM_COMMAND:
switch(LOWORD(wP)){
case IDOK:
EndDialog(hWnd,FALSE);
return TRUE;
break;
// 「キャンセル」が押された
case IDCANCEL:
EndDialog(hWnd,FALSE);
return TRUE;
break;
}
}
return TRUE;
}
>1.CreateWindow は親ウィンドウ(RecvWindow)の生成以外に使っていますか?
えっと、CreateWindowは一度も使っていないと思います。DialogBoxは関係ないなら
まず間違いはないと思います。
>2.親ウィンドウはマウスでクリックすると、どう反応しますか?(タイトルバーが点
滅するとか)
これはモーダルダイアログを作ったときと同じ反応です。ダイアログ(この場合クライ
アント領域?)
以外何の反応も示しません。
>3.他にダイアログが定義してあるとか、ってのはないですよね?
えっと、これはリソースで複数のダイアログを定義しているかということなのでしょう
か?
この内容でいいのならば、今のところは定義していません。IDD_CONECTただひとつで
す。