精华内容
下载资源
问答
  • 1.项目-->类向导-->添加类-->MFC类,其他操作如图所示。 2.在CwzdSplash.h的public:下声明CBitmapm_... 从神处复制如下代码:http://blog.csdn.net/leixiaohua1020/article/details/12753857 voidCWzdSplash::Crea

    1.项目-->类向导-->添加类-->MFC类,其他操作如图所示。

    2.在CwzdSplash.h的public:下声明CBitmap m_bitmap;

    3.在CwzdSplash.cpp下。

      从神处复制如下代码:http://blog.csdn.net/leixiaohua1020/article/details/12753857

    1. void CWzdSplash::Create(UINT nBitmapID)  
    2. {  
    3.     m_bitmap.LoadBitmap(nBitmapID);  
    4.     BITMAP bitmap;  
    5.     m_bitmap.GetBitmap(&bitmap);  
    6.     //CreateEx(0,AfxRegisterWndClass(0),"",WS_POPUP|WS_VISIBLE|WS_BORDER,0,0,bitmap.bmWidth,bitmap.bmHeight,NULL,0);  
    7.     CreateEx(0,  
    8.             AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),  
    9.             NULL, WS_POPUP | WS_VISIBLE, 0, 0, bitmap.bmWidth, bitmap.bmHeight, NULL , NULL);  
    10. }  
    11. void CWzdSplash::OnPaint()  
    12. {  
    13.     // TODO: 在此处添加消息处理程序代码  
    14.     // 不为绘图消息调用 CWnd::OnPaint()  
    15.     CPaintDC dc(this); // device context forpainting  
    16.     BITMAP bitmap;  
    17.     m_bitmap.GetBitmap(&bitmap);  
    18.     CDC dcComp;  
    19.     dcComp.CreateCompatibleDC(&dc);  
    20.     dcComp.SelectObject(&m_bitmap);  
    21.     // draw bitmap  
    22.     dc.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcComp,0,0,SRCCOPY);  
    23. }  
      在Dlg.cpp文件下#include<CwzdSplash.h>,然后在OnInitDialog()中写如下代码。
    1. void CWzdSplash::OnTimer(UINT_PTR nIDEvent)  
    2. {  
    3.     // TODO: 在此添加消息处理程序代码和/或调用默认值  
    4.     //CWnd::OnTimer(nIDEvent);  
    5.     DestroyWindow(); //销毁初始画面窗口  
    6. }
    7.  
      1.  CWzdSplash wndSplash;                 //创建启动窗口类的实例  
      2. wndSplash.Create(IDB_SPLASH);   //IDB_SPLASH为位图文件ID
      3. wndSplash.CenterWindow();  
      4. wndSplash.UpdateWindow();          //send WM_PAINT  
      5. Sleep(1500);  
      6. wndSplash.DestroyWindow();//销毁初始画面窗口  
    8.  

     

    展开全文
  • 摸索了半天,终于完成简单的开机启动画面了,不过大部分都是套用别人的模板的,即下载Spash.cpp 以及Splash.h文件并添加至工程中,该文件在附件中有讲。 首先下载一张.BMP图形,该图形最好和你的对话框的尺寸大小...

    摸索了半天,终于完成简单的开机启动画面了,不过大部分都是套用别人的模板的,即下载Spash.cpp 以及Splash.h文件并添加至工程中,该文件在附件中有讲。

    首先下载一张.BMP图形,该图形最好和你的对话框的尺寸大小一致,并将该图形导入至资源视图中,设置其ID为IDB_SPLASH

    在你的对话框的***.cpp下的InitInstance()函数中添加以下语句:

           CShellManager *pShellManager = new CShellManager;
          CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash);
    当然要在该文件的前面添加   #include"Splash.h"

    同样在***Dlg.cpp文件的前面添加#include"Splash.h"

    在该文件下添加OnCreate虚函数

    int ***Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    CSplashWnd::ShowSplashScreen(this);//显示启动画面


    if (CDialog::OnCreate(lpCreateStruct) == -1)
    return -1;
    return 0;
    }

    BOOL***Dlg::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
    {
    // TODO: 在此添加专用代码和/或调用基类
    return CDialog::Create(IDD, pParentWnd);

    }


    运行一下,就显示成功了,显示的时间可以在Spash.cpp的OnCreate函数中修改


    文件竟然上传不了  那我直接复制在这上面吧!

    Spash.cpp

    #include "stdafx.h"  // e. g. stdafx.h
    #include "resource.h"  // e.g. resource.h


    #include "Splash.h"  // e.g. splash.h


    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char BASED_CODE THIS_FILE[] = __FILE__;
    #endif


    /
    //   Splash Screen class


    BOOL CSplashWnd::c_bShowSplashWnd;
    CSplashWnd* CSplashWnd::c_pSplashWnd;
    CSplashWnd::CSplashWnd()
    {
    }


    CSplashWnd::~CSplashWnd()
    {
    // Clear the static window pointer.
    ASSERT(c_pSplashWnd == this);
    c_pSplashWnd = NULL;
    }


    BEGIN_MESSAGE_MAP(CSplashWnd, CWnd)
    //{{AFX_MSG_MAP(CSplashWnd)
    ON_WM_CREATE()
    ON_WM_PAINT()
    ON_WM_TIMER()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()


    void CSplashWnd::EnableSplashScreen(BOOL bEnable /*= TRUE*/)
    {
    c_bShowSplashWnd = bEnable;
    }


    void CSplashWnd::ShowSplashScreen(CWnd* pParentWnd /*= NULL*/)
    {
    if (!c_bShowSplashWnd || c_pSplashWnd != NULL)
    return;


    // Allocate a new splash screen, and create the window.
    c_pSplashWnd = new CSplashWnd;
    if (!c_pSplashWnd->Create(pParentWnd))
    delete c_pSplashWnd;
    else
    c_pSplashWnd->UpdateWindow();
    }


    BOOL CSplashWnd::PreTranslateAppMessage(MSG* pMsg)
    {
    if (c_pSplashWnd == NULL)
    return FALSE;


    // If we get a keyboard or mouse message, hide the splash screen.
    if (pMsg->message == WM_KEYDOWN ||
       pMsg->message == WM_SYSKEYDOWN ||
       pMsg->message == WM_LBUTTONDOWN ||
       pMsg->message == WM_RBUTTONDOWN ||
       pMsg->message == WM_MBUTTONDOWN ||
       pMsg->message == WM_NCLBUTTONDOWN ||
       pMsg->message == WM_NCRBUTTONDOWN ||
       pMsg->message == WM_NCMBUTTONDOWN)
    {
    c_pSplashWnd->HideSplashScreen();
    return TRUE; // message handled here
    }


    return FALSE; // message not handled
    }


    BOOL CSplashWnd::Create(CWnd* pParentWnd /*= NULL*/)
    {
    if (!m_bitmap.LoadBitmap(IDB_SPLASH))
    return FALSE;


    BITMAP bm;
    m_bitmap.GetBitmap(&bm);


    return CreateEx(0,
    AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
    NULL, WS_POPUP | WS_VISIBLE, 0, 0, bm.bmWidth, bm.bmHeight, pParentWnd->GetSafeHwnd(), NULL);
    }


    void CSplashWnd::HideSplashScreen()
    {
    // Destroy the window, and update the mainframe.
    DestroyWindow();
    AfxGetMainWnd()->UpdateWindow();
    }


    void CSplashWnd::PostNcDestroy()
    {
    // Free the C++ class.
    delete this;
    }


    int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CWnd::OnCreate(lpCreateStruct) == -1)
    return -1;
    CenterWindow();
    SetTimer(1, 3000, NULL);//显示时间设置为3s
    return 0;
    }


    void CSplashWnd::OnPaint()
    {
    CPaintDC dc(this);


    CDC dcImage;
    if (!dcImage.CreateCompatibleDC(&dc))
    return;


    BITMAP bm;
    m_bitmap.GetBitmap(&bm);


    // Paint the image.
    CBitmap* pOldBitmap = dcImage.SelectObject(&m_bitmap);
    dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcImage, 0, 0, SRCCOPY);
    dcImage.SelectObject(pOldBitmap);
    }


    void CSplashWnd::OnTimer(UINT nIDEvent)
    {
    // Destroy the splash screen window.
    HideSplashScreen();
    }


    splash.h文件为:

    #ifndef _SPLASH_SCRN_
    #define _SPLASH_SCRN_


    // Splash.h : header file
    //


    /
    //   Splash Screen class


    class CSplashWnd : public CWnd
    {
    // Construction
    protected:
    CSplashWnd();


    // Attributes:
    public:
    CBitmap m_bitmap;


    // Operations
    public:
    static void EnableSplashScreen(BOOL bEnable = TRUE);
    static void ShowSplashScreen(CWnd* pParentWnd = NULL);
    static BOOL PreTranslateAppMessage(MSG* pMsg);


    // Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CSplashWnd)
    //}}AFX_VIRTUAL


    // Implementation
    public:
    ~CSplashWnd();
    virtual void PostNcDestroy();


    protected:
    BOOL Create(CWnd* pParentWnd = NULL);
    void HideSplashScreen();
    static BOOL c_bShowSplashWnd;
    static CSplashWnd* c_pSplashWnd;


    // Generated message map functions
    protected:
    //{{AFX_MSG(CSplashWnd)
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnPaint();
    afx_msg void OnTimer(UINT nIDEvent);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    };




    #endif





    展开全文
  • AS对话框

    2020-07-06 17:45:28
    (一)警告对话框 AlertDialog: 一个可以有0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以创建大多数的交互界面, 是推荐的类型. (二)进度对话框 ProgressDialog: 显示一个进度环或者一个进度条. ...

    一.相关概念

    一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户交互. 对话框一般用于提示信息和与当前应用程序直接相关的小功能.

    Android API 支持下列类型的对话框对象:

    (一)警告对话框 AlertDialog: 一个可以有0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以创建大多数的交互界面, 是推荐的类型.
    (二)进度对话框 ProgressDialog: 显示一个进度环或者一个进度条. 由于它是AlertDialog的扩展, 所以它也支持按钮.
    (三)日期选择对话框 DatePickerDialog: 让用户选择一个日期.
    (四)时间选择对话框 TimePickerDialog: 让用户选择一个时间

    二.AlertDialog的创建和使用

    AlertDialog是Dialog的一个直接子类,使用AlertDialog,我们可以显示一个标题,最多3个按钮操作,以及一组选择框或者是自己定义的弹出框。
    AlertDialog要使用Builder设计模式来创建对象 。

    (一)Dialog的创建和使用

    在时间应用中的对话框基本不用Dialog而是用它的子类。
    这里简单使用一下Dialog,代码如下:

    // 普通的对话框,普通的对话框功能很少,除非重写类
    public void bt1(View v) {
    // 创建对话框对象
    Dialog dialog = new Dialog(this);
    // 创建对话框内容
    dialog.setTitle(“对话框的标题”);
    // 显示对话框
    dialog.show();

    }
    

    运行后显示结果:
    在这里插入图片描述

    可以看到有一个标题的对话框,而且这里没有设置内容的属性,Dialog的使用方法和功能都是很少的,不建议使用。

    (二)比较正常的AlertDialog的创建和使用
    代码设计:

    // 警告对话框,需要用Builder方法创建
    public void bt2(View v) {
    // 这里的属性可以一直设置,因为每次设置后返回的是一个builder对象
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    // 设置提示框的标题
    builder.setTitle(“提示标题”).
    // 设置提示框的图标
    setIcon(R.drawable.ic_launcher).
    // 设置要显示的信息
    setMessage(“文本的提示信息:你妈喊你回家吃饭了!”).
    // 设置确定按钮
    setPositiveButton(“确定”, new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, "选择就确定哦", 0).show();
    
                    }
                }).
    
                // 设置取消按钮,null是什么都不做
                setNegativeButton("取消", null).
                // 设置退出按钮,在中间的按钮
                setNeutralButton("退出", new OnClickListener() {
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // 退出程序
                        finish();
    
                    }
                });
        // 生产对话框
        AlertDialog alertDialog = builder.create();
        // 显示对话框
        alertDialog.show();
    
    }
    

    程序运行后显示的结果:
    在这里插入图片描述

    这里如果点击取消,对话框消失,什么都没有做。
    如果点击退出,会直接退出程序。
    如果点击确定,会弹出一个土司,提示你。
    这里可以根据用户的选择做出相应的行为。

    (三)设计一个选择菜单样式的对话框
    代码设计:

    //数据源
    String[] array = new String[] { "音乐", "体育", "舞蹈", "看书" };
    
    // 显示一个菜单的对话框选项,点击选择菜单后,菜单会消失
    
    // 匿名类去创建
    public void bt3(View v) {
    
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        // 设置标题
        builder.setTitle("选择你最喜欢的课程").
        // 设置可选择的内容,并添加点击事件
                setItems(array, new OnClickListener() {
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // which代表的是选择的标签的序列号
    
                        Toast.makeText(MainActivity.this, "选择" + array[which],
                                0).show();
    
                    }
                }).
                // 产生对话框,并显示出来
                create().show();
    
    }
    

    程序运行后显示的结果:
    在这里插入图片描述

    设置菜单是builder的setItem方法来完成的。
    点击某一个菜单选项后对话框会自动消失,所以这里设置按钮也是没有什么用处的。
    这里还能监听点击菜单的事件,获取用户的选择内容。

    (四)设置一个单选按钮菜单的对话框
    其实这个对话框和上面的菜单对话框差不多,只是样式改变了,还有一点不同的是点击一个选项后对话框是不会消失的,所以必须要设置按钮,来使对话框消失。

    代码设计:

    // 单选按钮的对话框,选择一个按钮值后,
    // 对话框也是不会自动消失,需要自己关闭
    // 要设置按钮,点击按钮后对话框才会消失
    public void bt4(View v) {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    // 设置标题
    builder.setTitle(“选择你最喜欢的课程”).
    // 设置可选择的内容,并添加点击事件
    // 第一个参数是可以选择的单选框的内容
    // 第二个参数是默认选中的项
    // 第三个参数是点击选中的监听器
    setSingleChoiceItems(array, 0, new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
    
                        Toast.makeText(MainActivity.this, "选择" + array[which],
                                0).show();
    
                    }
                }).
                // 因为对话框不会自动消失,所以要添加按钮的必要
                // 设置确定按钮
                setPositiveButton("确定", new OnClickListener() {
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, "选择确定", 0).show();
                    }
                }).
                // 取消,什么都不做,对话框消失而已
                setNegativeButton("取消", null).
                // 产生对话框,并显示出来
                create().show();
    
    }
    

    运行后的结果:
    在这里插入图片描述

    设置单选菜单是builder的setSingleChoiceItem方法来完成的。
    这里要可以设置两个监听事件,一个是单选按钮某一个选项被选中时触发的,另一个是点击按钮时触发的事件。
    程序中每次选中一个单选按钮都会弹出一个吐司,提示你选择的内容,点击确定后也会显示一个吐司。
    1
    2
    3

    (五)多选项的对话框设计
    多选框的显示和单选的显示也是有点相似的,都是需要设置按钮来使对话框消失。
    代码如下:

    // 多选按钮的对话框
    // 对话框也是不会自动消失,需要自己关闭
    // 要设置按钮,点击按钮后对话框才会消失
    public void bt5(View v) {

        // 多选按钮的默认状态
        boolean[] checkedItems = { true, false, false, true };
    
        // 多选按钮选中后保存的数据
        final List<String> list = new ArrayList<String>();
        // 默认的数据
        list.add("音乐");
        list.add("看书");
        // 创建对话框的builder对象
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    
        // 设置标题
        builder.setTitle("选择你最喜欢的课程").
        // 设置可选择的内容,并添加点击事件
        // 第一个参数是可以选择的选框的内容
        // 第二个参数是一个布尔数组,如果是true代表的是默认选中
        // 第三个参数是点击选中的监听器
                setMultiChoiceItems(array, checkedItems,
                        new OnMultiChoiceClickListener() {
    
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which, boolean isChecked) {
                                // 这里无论某个选项是被选中后被取消都会触发该方法
                                // which代表的是选中的是多少游标值的选项
                                // isChecked是代表该选项是或否选中了
                                // 判断如果集合中有某个数据,就把他移除,否则就添加数据
                                // 注意这里数选择之后的状态
                                if (isChecked) {
                                    // 添加数据
                                    list.add(array[which]);
                                } else {
                                    // 移除数据
                                    list.remove(array[which]);
                                }
    
                            }
                        }).
                // 因为对话框不会自动消失,所以要添加按钮的必要
                // 设置确定按钮
                setPositiveButton("确定", new OnClickListener() {
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, "你选中了" + list, 0)
                                .show();
                    }
                }).
                // 取消,什么都不做,对话框消失而已
                setNegativeButton("取消", null).
                // 产生对话框,并显示出来
                create().show();
    
    }
    

    程序运行后的结果:
    在这里插入图片描述

    设置多选菜单是builder的setMultiChoiceItem方法来完成的。
    这里要可以设置两个监听事件,一个是选项框的某一个选项的状态改变时触发的,另一个是点击按钮时触发的事件。
    程序中每次改变选项的内容,保存数据的集合都会改变,点击确定后也会显示一个吐司,显示集合里面的内容。

    选择全部内容后,确定,显示的结果:

    在这里插入图片描述

    (六)使用适配器显示对话框

    使用适配器显示对话框和显示菜单对话框类似,都是选中对应选项后,对话框自动消失,但是使用适配器可以显示很负责的界面。

    // 使用适配器显示对话框–>builder的setAdapter方法
    // 这里选择一个选项后,对话框就会关闭,所以是不需要设置按钮的
    // 其实这里可以设置很复杂的适配器对象,但是实际应用中不会在对话框显示太复杂的布局
    public void bt6(View v) {

        // 创建ArrayAdapter适配器
        // android.R.layout.simple_list_item_1是Android系统里面的简单布局
        // 第三个参数是数据源
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, array);
    
        // 创建对话框对象
        new AlertDialog.Builder(this).
        // 设置标题
                setTitle("使用适配器显示数据").
                // 添加适配器,并为适配器添加点击事件
                setAdapter(adapter, new OnClickListener() {
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // which是选择的条目的游标值
                        Toast.makeText(MainActivity.this, "选择" + array[which],
                                0).show();
                    }
                }).
                // 产生并显示
                create().show();
    
    }
    

    运行程序后显示的结果:

    在这里插入图片描述

    设置多选菜单是builder的setAdapter方法来完成的。
    这里要设置一个监听事件,适配器的监听事件。
    这里点击某一个选项后,对话框消失,并土司选中的内容。

    (七)设计一个有输入框的对话框
    // 设置一个有输入文本的对话框---->builder的setView方法
    // 输入数据后,对数据进行处理
    // 这里要设置按钮,才能对数据的数据进行处理
    public void bt7(View v) {

        // 创建一个EditText对象
        final EditText et = new EditText(this);
    
        // 创建对话框对象
        new AlertDialog.Builder(this).
        // 设置标题
                setTitle("有输入框的对话框").
                // 添加输入的文本框
                setView(et).
                // 添加确定按钮
                setPositiveButton("确定", new OnClickListener() {
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // 获取输入的字符
                        String in = et.getText().toString();
                        Toast.makeText(MainActivity.this, "输入;" + in, 0).show();
                    }
                }).setNegativeButton("取消", null).
                // 产生并显示
                create().show();
    
    }
    

    运行后的结果:
    在这里插入图片描述

    设置输入框是builder的setView方法来完成的。
    这里要设置一个按钮监听事件。
    这里点击确定按钮后,获取输入框的内容并土司出来。

    (八)使用对话框内的控件控制对话框
    这里使用对话框内的一个布局文件的按钮,来关闭对话框

    // 使用对话框内的控件来关闭对话框
    public void bt8(View v) {
    
        // 创建一个EditText对象
        final Button btn = new Button(this);
        // 给按钮设置文字
        btn.setText("关闭对话框");
        // 创建对话框对象
        final AlertDialog dialog = new AlertDialog.Builder(this).
        // 设置标题
                setTitle("通过按钮关闭对话框").
                // 添加输入的文本框
                setView(btn).
                // 产生
                create();
    
        // 设置对话框不可以关闭,一般情况下对话框是失去焦点后自动消失的
        // 但是加 了.setCancelable(false),对话框就不会消失,除非手动退出
        dialog.setCancelable(false);
    
        btn.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                // 点击后关闭对话框,两种方法都可以
                 dialog.cancel();
                //dialog.dismiss();
            }
        });
    
        // 显示
        dialog.show();
    
        //给对话框设置一个监听时间,对话框退出前会执行
        dialog.setOnDismissListener(new OnDismissListener() {
    
            @Override
            public void onDismiss(DialogInterface dialog) {
                // 只要关闭都会调用
                Toast.makeText(MainActivity.this, "关闭", Toast.LENGTH_SHORT)
                        .show();
            }
        });
    
    }
    

    运行结果:
    在这里插入图片描述

    这里设置了dialog.setCancelable(false);的属性,代表了对话框不能随着焦点的失去而消失对话框,要收到关闭对话框,要么设置确定和取消按钮,要么在对话框布局中设置能够关闭对话框的控件;

    (九)AlertDialog的详细属性
    对话框的全部属性表现,如图所示:

    在这里插入图片描述

    这里分上、中、下三部分。
    区域一是标题相关
    区域二是主体相关
    区域三是按钮相关

    其中任何部分都可以不设置,
    但是有一点要注意的是主体内容只能有一种,比如:设置了SetMessage不能再设置SetAdapter或SetView。因为设置了也不会显示的。

    1.区域1那里就是定义弹出框的头部信息
    包括标题名或者是一个图标。
    (1)setTitle : 为对话框设置标题
    (2)setIcon : 为对话框设置图标

    2.区域2那里是AlertDialog对话框的content部分
    在这里我们可以设置一些message信息,或者是定义一组选择框,还可以定义我们自己的布局弹出框。
    (1)setMessage: 为对话框设置内容,如果设置了其他内容,那么Message不要设置,否者只显示Message。
    (2)setView: 给对话框设置自定义View
    setItems: 设置对话框要显示的一个list,一般用于显示几个命令时
    //items是传入一个字符串数组,或者是R文件中的数组
    (3)setSingleChoiceItems: 用来设置对话框显示一系列的单选按钮
    (4)setMultiChoiceItems: 用来设置对话框显示一系列的复选框

    3.区域3那里使我们的Action Buttons部分
    这里我们可以定义我们的操作按钮。
    在AlertDialog中,定义按钮都是通过 setXXXButton 方法来完成,其中一共有3种不同的Action Buttons供我们选择:
    (1)setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)
    这是一个相当于OK、确定操作的按钮.
    (2)setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener)
    这是一个相当于取消操作的按钮。

    (3)setNeutralButton (CharSequence text, DialogInterface.OnClickListener listener)
    这个是相当于一个忽略操作的按钮。

    触发相关按钮都的行为都是我们程序员自己定的,比如你可以设置点击确定后关闭页面,也可以设置点击取消后关闭页面。但是我们设计的时候还是要按照大部分人的阅读习惯来设定。

    4.监听事件的说明
    在AlertDialog的各种设置中,都充斥着DialogInterface.OnClickListener,比如按钮,内容区的items,单选按钮等,只有多选按钮是用了另外一个监听
    DialogInterface.OnMultiChoiceClickListener。

    (1)单选按钮的监听
    public void onClick(DialogInterface dialog, int which);
    //which代表items,单选按钮中的序号

    (2)多选按钮的监听
    public void onClick(DialogInterface dialog, int which, boolean isChecked);
    //which代表items,单选按钮中的序号
    //isChecked代表当前点击的序号是否被勾选

    (3)Adapter的监听
    AlertDialog还支持ListAdapter的子类,我们可以传入各种ListAdapter的子类,来显示复杂的列表,当然直接使用 setView 也可以办到
    public Builder setAdapter(final ListAdapter adapter, final
    OnClickListener listener)

    三.ProgressDialog进度对话框

    ProgressDialog是AlertDialog类的子类,可以为一个未定义进度的任务显示一个旋转轮形状的进度动画,或者为一个指定进度的任务显示一个进度条。它的用处非常广泛,在每次用户操作一个延迟的任务时,我们都必须以进度对话框的形式告诉用户,否者用户并不知道操作已经开始,可能会多次操作同一个任务,并有可能导致异常发生。

    (一)构造方法和常用方法
    1.构造方法需要传入一个上下文
    public ProgressDialog(Context context)

    2.给定一个样式,带进度条和不带进度条的样式
    public void setProgressStyle(int style) //可选值
    //STYLE_SPINNER 默认 圆形,没有进度条的样式
    //STYLE_HORIZONTAL 给定进度条的样式

    3.设置进度最大值,需要给定STYLE_HORIZONTAL
    public void setMax(int max)

    4.是否能用返回键关闭 true可以关闭,false不能关闭
    public void setCancelable(boolean flag)

    5.设置一个消息
    public void setMessage(CharSequence message)

    6.判断Dialog是否显示
    public boolean isShowing()

    7.关闭对话框
    public void dismiss()

    8.ProgressDialog从AlertDialog中继承的常用方法setIcon和setTitile

    9.虽然ProgressDialog可以设置Button,但是我们一般都不会去使用它
    (二)进度对话框的设计的使用
    1.圆形进度条对话框
    // 显示圆形的进度框
    public void bt1(View v) {
    // 创建进度条的对话框
    ProgressDialog dialog = new ProgressDialog(this);
    // 设置进度条的样式,选择圆形或条状
    // 这里这圆形的
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    // 设置标题
    dialog.setTitle(“文件下载”);
    // 设置文本信息
    dialog.setMessage(“正在下载。。。”);
    // 设置是否能用后退键出对话框
    // 选择false就代表不能
    // 如果设置为false,程序可能退出不了
    dialog.setCancelable(true);
    // 显示对话框
    dialog.show();
    }

    程序运行后的结果:
    在这里插入图片描述

    这里点击进度对话框的其他地方,对话框就消失了。因为默认情况,对话框失去焦点就会消失。

    2.条形对话框
    // 显示设置水平的进度框
    public void bt2(View v) {
    // 创建进度条的对话框
    final ProgressDialog dialog = new ProgressDialog(this);
    // 设置进度条的样式,选择圆形或条状
    // 这里这圆形的
    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    // 设置标题
    dialog.setTitle(“文件下载”);
    // 设置文本信息
    dialog.setMessage(“正在下载。。。”);
    // 设置是否能用后退键出对话框
    // 选择false就代表不能
    // 如果设置为false,程序可能退出不了
    dialog.setCancelable(false);
    // 显示对话框
    dialog.show();

        // 这里新建一个线程来,跟新进度和关闭页面
        new Thread(new Runnable() {
    
            @Override
            public void run() {
                // 获取进度值的当前的值
                int index = 0;
                // 跟新进度
                while (index < dialog.getMax()) {
                    index++;
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    // 设置进度的值
                    dialog.setProgress(index);
    
                }
    
                // 完成任务后,退出对话框
                dialog.cancel();
    
            }
        }).start();
    
    }
    

    运行结果:
    在这里插入图片描述

    这个进度对话框是没有办法取消的,因为设置了:dialog.setCancelable(false);
    只能等到文件下载完成后对话框自动消失。这个设置在实际应用中也是会有用到的,比如复制文件,不能随便打断。本示例中,进度的跟新需要用子线程来更新,进度条的更新可以直接在子线程中实现,而其他布局的跟新是不能在子线程中直接更新的。要使用runOnUIThread();方法来更新主线程的界面,

    四.时间和日期选择器对话框
    (一)时间和日期对话框的方法
    DatePickerDialog与TimePickerDialog都继承于AlertDialog,基本方法和我们前面讲的DatePicker和TimePicker组件一样,只是需要调用Dialog的show方法来显示。在构造方法里需要传入回调监听

    1.用户改变时间后的监听
    public interface OnTimeChangedListener { void onTimeChanged(TimePicker view, int hourOfDay, int minute);
    }

    2.用户改变日期后的监听
    public interface OnDateChangedListener { void onDateChanged(DatePicker view, int year, int monthOfYear,
    int dayOfMonth);
    }

    (二)时间对话框的使用
    // 显示时间的对话框
    public void btn1(View v) {
    // 第一个参数是上下文
    // 第二个参数是监听时间选择后的事件
    // 后面两个数是默认是时间
    // 后一个是代表是否显示时间的格式是24小时制的
    TimePickerDialog dialog = new TimePickerDialog(this,
    new OnTimeSetListener() {

                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay,
                            int minute) {
                        Toast.makeText(MainActivity.this,
                                hourOfDay + "时" + minute + "分", 0).show();
    
                    }
                }, 21, 8, true);
    

    //显示标题
    dialog.setTitle(“选择你要设定的时间”);
    // 显示时间的对话框
    dialog.show();

    }
    

    运行后显示的结果:

    在这里插入图片描述

    这是时间对话框的选择按钮,其中也可以设置很多属性。
    这里点击完成后会弹出一个选择的时间的土司。
    如图所示:

    在这里插入图片描述

    (三)日期对话框的使用
    // 显示日期的对话框
    public void btn2(View v) {
    // 第一个参数是上下文
    // 第二个参数是监听时间选择后的事件
    // 后面三个数是默认是日期数
    DatePickerDialog dialog = new DatePickerDialog(this,
    new OnDateSetListener() {
    // 日期选择器上的月份是从0开始的

                    @Override
                    public void onDateSet(DatePicker view, int year,
                            int monthOfYear, int dayOfMonth) {
                        Toast.makeText(
                                MainActivity.this,
                                year + "年" + (monthOfYear + 1) + "月"
                                        + dayOfMonth + "日", 0).show();
    
                    }
                }, 2016, 11, 13);
        // 显示时间的对话框
        dialog.show();
    
    }
    

    点击运行后,显示结果:
    在这里插入图片描述

    上面是日期对话框的默认画面,也是挺好看的,实际中也可以根据实际需要对它的页面样式进行修改。
    点击完成后显示的结果:

    ————————————————
    版权声明:本文为CSDN博主「峥嵘life」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/wenzhi20102321/article/details/52818351

    展开全文
  • 下载地址:http://download.csdn.net/source/23887462、把Splash.cpp 和 Splash.h复制到你的工程目录下,然后选择“Project——Add To Project——Files”,在打开的对话框中选择此两个文件。3、为工程添加一位图...

    1、下载下面的文件,里面包含了Splash.cpp Splash.h。

    下载地址:http://download.csdn.net/source/2388746

    2、把Splash.cpp Splash.h复制到你的工程目录下然后选择Project——Add To Project——Files”,在打开的对话框中选择此两个文件。

    3、为工程添加一位图资源作为启动画面,并将其ID改为IDB_SPLASH。

    4、在BOOL CxxxApp::InitInstance()中添加代码,注意不要忘了在头部添加头文件#include "Splash.h"。

    BOOL CDialogsplApp::InitInstance()

    {

    {

         CCommandLineInfo cmdInfo;

         ParseCommandLine(cmdInfo);   CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash);

    }

    ...

    ...

    }

    5、利用类向导为CxxxDlg添加OnCreate方法然后添加代码在对话框启动时显示启动画面

    int CDialogsplDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)

    {

       if (CDialog::OnCreate(lpCreateStruct) == -1)

          return -1;

      

       CSplashWnd::ShowSplashScreen(this);

     

       return 0;

    }

    也不要忘了在CxxxDlg.cpp的头部添加头文件#include "Splash.h"

     

        这样,启动画面就制作好了,但是显示时间很短。这时我们打开CSplashWnd类的OnCreate方法,可以看到有这么一句:SetTimer(1, 750, NULL);这是一个定时语句,即启动画面的显示时间,我们可以修改其第二个参数以改变显示时间。

    展开全文
  • 文章目录一、简单绘图二、设置对话框2.1 设置线宽2.2 设置线型 新建一个单文档类型的MFC工程,取名:Graphic。此程序将实现简单的绘图功能。 一、简单绘图 实现简单的绘图功能,包括点、直线和椭圆的绘制。为了实现...
  • Android对话框的使用总结

    千次阅读 多人点赞 2016-10-14 19:15:17
    本文对各类对话框的设计和使用都有比较详细的介绍。 一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户交互. 对话框一般用于提示信息和与当前应用程序...
  • openCV 对话框 显示图像

    千次阅读 2013-01-15 15:07:40
    // CVDlgReadDlg.h : 头文件 // #pragma once #include #include #include #include using namespace std; using namespace cv;...// CCVDlgReadDlg 对话框 class CCVDlgReadDlg : public CDialog
  • VC++编程之对话框贴图

    千次阅读 2014-11-29 15:24:52
    基于对话框的程序写好后,为对话框贴上个图片让界面更加美观(我承认做界面,MFC显得力不从心,不如QT)。 其实很简单,我们以位图为例,选好我们需要的位图资源(bmp),假若自己的图片不是位图资源,可以通过...
  • 提醒:样式可以按下面的创建对话框代码写,其他的忽略即可(例如静态引用 Context),会造成内存泄漏,自己在 Activity 里随便封装个方法就行了。 在公司项目遇到了这么一个小需求,在加载网页的时候显示一个进度条...
  • MFC让对话框全屏方案

    千次阅读 2018-08-13 17:45:27
    //复制代码 CRect rcTemp; rcTemp.BottomRight() = CPoint(cx, cy); rcTemp.TopLeft() = CPoint( 0 , 0 ); MoveWindow(&rcTemp); 方法二因为获得了窗口与屏幕的参数,所以当想调整Dialog上的一些控件位置时...
  • MFC 选择文件夹的对话框

    千次阅读 2011-05-02 19:24:00
    例,把"d://softist1.txt"复制到"d://softist2.txt",即使"d://softist2.txt"已经存在。 BOOL bRet = CopyFile(_T("d://softist1.txt"), _T("d://softist2.txt"), FALSE);             2....
  • 以下文章转载至:http://www.biosrepair.com/pic/pic66.htm Windows属性对话框修改方法 ...
  • 另一类对话框程序却没有相应支持,从MFC打印及打印预览的标准支持入手,可以在对话框程序中,增加三个类以支持打印及打印预览,本文介绍了这三个类的实现。  打印及打印预览是编写应用程序经常要解决的问题,为了...
  • 启动节点有:“启动画面”、“欢迎使用”、3个“单选按钮”、3个“复选框”、3个“文本框”、“安装文件夹”(或“安装地址”)以及“确认安装”。 二、解决方案 可以使用Orca工具创建自定义的对话框,Orca ...
  • 对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com 对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址 > 转载于:...
  • 对话框就是一个窗口,它不仅可以接收消息,而且可以被移动和关闭,甚至可以在客户区进行绘图。对话框相当于一个容器,在它上面能够放置各种各样的标准控件和扩展控件,使程序支持用户输入的手段更加丰富。 1.1 常用...
  • 做了一个简单的对话框,上面有一个picture控件,为了让picture控件上的内容在窗口最小化或者拖出窗口范围之后,仍然得以保存,并且防止闪烁,采用了双缓冲绘图的方式。 重载了OnPaint函数 。。。 //也可以不重绘...
  • 文章目录一、基于对话框的程序二、“逃跑”的按钮三、属性表单和向导的创建3.1 创建属性页 一、基于对话框的程序 新建一个基于对话框的项目,项目名称:DlgTest。 生成的项目结构为: 解决方案结构: 类视图下有三...
  • 做了一个简单的对话框,上面有一个picture控件,为了让picture控件上的内容在窗口最小化或者拖出窗口范围之后,仍然得以保存,并且防止闪烁,采用了双缓冲绘图的方式。 重载了OnPaint函数 。。。 //也可以不重绘...
  • 实验要求: 项目一:文件及选择 目的:了解文件对话框的使用方法,...2. 在IDE中输入(非复制、粘贴)博文中的代码,调试并运行。 3. 在上述界面中,增加如下控件:  JLabel,显示文本为“所选文件or
  • 如果只是想在安装过程中不显示复制的文件名称及其路径,那么点击“编辑”按钮,并取消“显示状态文本一”的选择。如下图。 在“安装之后”中可编辑安装完毕后的屏幕界面。如下图。 上述过程完成后,...
  • 这个工具,在你准备好工具以后,在自己的硬盘上建立一个临时的目录,从你的系统c:/windows/system32中复制文 件sysdm .cpl到这个临时目录,用ResHacker打开,看到如下图画面:  对于2、3、4、6部分和第7部分的按钮...
  • 用曲线构建文本会增加生成的文件的体积,但是当你需要创建无法复制文本和涉及未安装字体的文档时,这会非常有用。 应广大用户需求,我们重新设定了创建点划线的机制。修复了从Chrome浏览器的内部查看器打印此类线...
  • 10、下面我们再做一些细化的工作,现在整个画面还是有一些沉闷。新建一个图层,点击“渐变工具”,打开“渐变编辑器”,如下图所示,偷个懒,直接选择“预设”中的“色谱”渐变,向下拉掉不需要的色块,我们做一个...
  • 将压缩包解压到一个单独文件夹中。...启动BMP2KLD.exe,点击“分解KLD StartUpRes” ,在弹出的对话框中选择刚刚复制进去的StartUpRes.dll。程序会自动分解出启动画面,稍后会提示StartUpRes分解完成。
  • 修改Android开机画面

    千次阅读 2013-03-25 15:56:34
    3.另存为,保存为ppm格式,在弹出的对话框中选择Ascii,然后复制到Logo文件夹替换原来的文件,同时删除logo_linux_clut224.c logo_linux_clut224.o文件。 Android系统开机动画包括两...
  • 修改系统登陆画面

    2007-03-06 09:12:00
    三种方法手动修改登陆画面请在替换前自行备份好C:/windows/system32/logonui.exe...将要替换的logonui.exe文件复制到C:/windows/system32目录下,当系统出现文件保护对话框时选择“取消”即可方法二1。重启系统进入安全
  • 这个项目后,您将会看到如下的对话框出现。   请先确认 From WC at URL: 中的文件夹是您要复制的来源文件夹。接着,在 To URL 中输入您要复制过去的路径。通常我们会将所有的 branch 集中在一个文件夹下面...
  • 1.按【Ctrl+O】组合键打开一幅素材照片,按快捷键【Ctrl+J】复制“背景”图层,生成Photoshop CS6“图层1”。     2.对Photoshop CS6“图层1”执行“滤镜”-“杂色”-“减少杂色”命令,在打开的“减少杂色”...
  • 修改windows启动画面:Logonui.exe

    万次阅读 2009-07-13 19:55:00
    一.登陆画面修改大家下了登陆画面不知道怎么用就要看看了。...登陆画面制作 一、在你的电脑里找到logonui.exe文件,通常位于c:/windows/system32目录中,复制两份,一份作为 备份,一份用来编辑。 二、用ResHacke

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,139
精华内容 4,055
关键字:

复制对话框画面