2012-04-23 8 views
0

異なるメニュー項目が選択されているときに異なるモードレスダイアログボックスを表示するようにプログラムを設定しようとしています。これまでは1を表示する作業しか行っていませんが、この作業を行うことはできません。C++ WINAPI(MFCなし)を使用していくつかのモードレスダイアログを開始する

コードを実行すると、メインウィンドウのフォーカスが失われていることがわかりますが、aboutダイアログボックスが表示されません。私はコードのような大規模なセクションを貼り付けるために謝るが、私はのように気づいていないよ

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
{ 

UNREFERENCED_PARAMETER(lParam); 
switch (message) 
{ 
case WM_CREATE: 
    g_hToolbar = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUTBOX), 
     hDlg, ToolDlgProc 
     ); 
    if(g_hToolbar != NULL) 
    { 
     ShowWindow(g_hToolbar, SW_SHOW); 
    } 
case WM_INITDIALOG: 
    return (INT_PTR)TRUE; 

case WM_ACTIVATE: 
    if (0 == wParam)    // becoming inactive 
     hDlgCurrent = NULL; 
    else       // becoming active 
     hDlgCurrent = hDlg; 
    return FALSE; 

case WM_COMMAND: 
    if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDOK) 
    { 
     EndDialog(hDlg, LOWORD(wParam)); 
     return (INT_PTR)TRUE; 
    } 
    break; 
} 
return (INT_PTR)FALSE; 
} 

のWndProc

でその後、私のコール
case IDM_ABOUT: 
     CreateDialog(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);   
     break; 

:ここ

HWND g_hToolbar = NULL; 
HWND hDlgCurrent = NULL; 

int APIENTRY _tWinMain(HINSTANCE hInstance, 
HINSTANCE hPrevInstance, 
LPTSTR lpCmdLine, 
int  nCmdShow) 
{ 
UNREFERENCED_PARAMETER(hPrevInstance); 
UNREFERENCED_PARAMETER(lpCmdLine); 

MSG msg; 
HACCEL hAccelTable; 

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); 
LoadString(hInstance, IDC_GUIAPP, szWindowClass, MAX_LOADSTRING); 
MyRegisterClass(hInstance); 

// Perform application initialization: 
if (!InitInstance (hInstance, nCmdShow)) 
{ 
    return FALSE; 
} 

while(GetMessage(&msg, NULL, 0, 0) > 0) 
{ 
    if(!IsDialogMessage(g_hToolbar, &msg)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
} 
return (int) msg.wParam; 
} 

は私の程度ボックスのコードですどこに問題があるのか​​を明らかにする。

これについての助けがあれば助かります!

+0

モーダルダイアログを作成するコードがありません。そして明らかにそのコードはあなたが求めているものです。とにかく、Cの代わりにC++でコード化すれば、はるかに明確かつ安全になります。 'tWinMain'という怪物は、標準Cでも標準C++でもなく、技術的な目的を果たさないことに注意してください。それはMicrosoftの難読化ですので、標準の 'main'を使用してください。また、グローバル変数を使用しないことも役立ちます。一般的にCスタイルのキャストは使用しないでください。 –

+0

なぜあなたの 'WM_CREATE'ハンドラはダイアログをやり直してみますか? – Deanna

+0

私は問題を解決しました。 g_hツールバーがダイアログを作成する必要はありませんでした。私は 'ShowWindow(g_hToolbar、SW_SHOW);を' WM_INITDIALOG'に移動し、私のために働いています。 – L337BEAN

答えて

0

この問題は解決されました。

解決策はコメントに含まれています。

関連する問題