none
我新拿了一个Pocket Pc,编了几个程序,但发现对话框都只能全屏显示,这是为什么? RRS feed

  • 常规讨论

  • 一般在Pocket PC中所有的对话框都是全屏显示,这是操作系统规定的行为。但如使用系统自定义的信息提示框,则不是全屏显示。如: Afxmessagebox所激发的提示框就是如此。
    可以重载WM_INITDIALOG消息
    MSDN:
    The DialogBox macro uses the CreateWindowEx function to create the dialog box. DialogBox then sends a WM_INITDIALOG message to the dialog box procedure. The function displays the dialog box (regardless of whether the template specifies the WS_VISIBLE style), disables the owner window, and starts its own message loop to retrieve and dispatch messages for the dialog box.

    就是说当对话框窗口创建完以后,会发出一个WM_INITDIALOG 消息,你只要在自己的窗口消息处理函数里对这个消息进行处理,就可以了
    比如:

    case WM_INITDIALOG:
    // Create a Done button and size it.
    shidi.dwMask = SHIDIM_FLAGS;
    shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN;
    shidi.hDlg = hDlg;
    SHInitDialog(&shidi);
    InitOptionDlg(hDlg);
    return TRUE;

    主要就是修改shidi.dwFlags ,看看ABOUT的窗口消息处理吧
    补充: SHINITDLGINFO shidi;
    SHINITDLGINFO shidi;
    上面说的是在纯API的程序中的方法
    对于MFC创建的DIALOG程序,可以这样:

    BOOL CXXXDlg::OnInitDialog()
    {

    SHINITDLGINFO shidi;
    HWND hDlg = m_hWnd;
    // Create a Done button and size it.
    shidi.dwMask = SHIDIM_FLAGS;
    shidi.dwFlags = SHIDIF_SIPDOWN ;
    shidi.hDlg = hDlg;
    SHInitDialog(&shidi);
    //InitOptionDlg(hDlg);
    //CDialog::OnInitDialog();
    ……

    }

    2009年6月25日 7:29