精华内容
下载资源
问答
  • VC弹出对话框

    2012-11-19 11:01:06
    本文例子是一个典型的C++/MFC对话框程序,设置了 EX_WM_TOOLWINDOW 扩展式样,因此在标题栏左上角看不到系统菜单图标,但通过 Ctrl+Space 或者在标题栏单击鼠标右键可以调出系统菜单
  • 在DirectX下弹出对话框作者:李维e-mail: malloc@ 关键字:DirectX,Dialog,对话框
  • 本文例子是一个典型的C++/MFC对话框程序,设置了 EX_WM_TOOLWINDOW 扩展式样,因此在标题栏左上角看不到系统菜单图标,但通过 Ctrl+Space 或者在标题栏单击鼠标右键可以调出系统菜单。
  • vc6.0下建立MFC单一对话框,实现单击菜单项,弹出对话框
  • 如何实现vc菜单弹出对话框

    千次阅读 2011-08-17 11:51:16
    本文例子是一个典型的C++/MFC对话框程序,设置了 EX_WM_TOOLWINDOW 扩展式样,因此在标题栏左上角看不到系统菜单图标,但通过 Ctrl+Space 或者在标题栏单击鼠标右键可以调出系统菜单。 例子程序对系统菜单进行了...
     
    

    本文例子是一个典型的C++/MFC对话框程序,设置了 EX_WM_TOOLWINDOW 扩展式样,因此在标题栏左上角看不到系统菜单图标,但通过 Ctrl+Space 或者在标题栏单击鼠标右键可以调出系统菜单。


    例子程序对系统菜单进行了定制,在原有菜单基础上添加了两个菜单命令:一个是显示“关于”对话框;另一个是“退出”。之所以要加一个“退出”菜单命令,是因为例子程序改写了对话框原来默认的“关闭”菜单命令行为(Alt-F4),用来隐藏对话框。因此必须加一个程序的“退出”出口。此外,例子程序利用一个第三方的系统托盘处理类,利用系统托盘图标可以显示/隐藏对话框。下面我们就来看看用 C++/MFC 实现的细节。


    添加菜单

    首先在资源定义文件 resource.h 中定义菜单项标示,也可以在标准头文件中定义。菜单项标示必须具有唯一性。其次,Windows 对系统菜单的处理与常规菜单的处理方法是不同的,不管是缺省的菜单还是定制的菜单,它们都没有象常规菜单命令那样的消息处理例程。假设我们要添加两个定制的系统单:

    #define IDM_ABOUT 16
    #define IDM_EXIT 17
    IDM_的意思是该定义为菜单项ID。添加菜单命令是在对话框的初始化例程以及窗口创建函数(OnInitDialog(), OnCreate())中进行的。如: BOOL CBabelOnDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();

    // 在系统菜单中添加 "关于..." 和 "退出" 菜单项


    // 解决 Windows 95 中的 bug
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

    // 命令 IDs 必须在预定义的系统菜单之后
    ASSERT(IDM_ABOUTBOX < 0xF000);

    // 解决 Windows 95 中的 bug
    ASSERT((IDM_EXIT & 0xFFF0) == IDM_EXIT);

    // 命令 IDs 必须在预定义的系统菜单之后
    ASSERT(IDM_EXIT < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
    pSysMenu->AppendMenu(MF_STRING,IDM_EXIT,"退出(&x)");
    pSysMenu->AppendMenu(MF_SEPARATOR);
    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, "关于(&A)...");
    ......
    }

    ......

    //other initialization
    }
    这里在添加每个菜单前都有两个 ASSERT 语句,第一个 ASSERT 的目的是修复 Windows 95 中存在的 Bug,第二个 ASSERT 保证定制的命令 IDs 是在预定义的系统菜单之后,以免发生冲突。查一下 MSDN 库的 MFC 文档关于系统菜单的描述,你会发现下面的内容: “......所有预定义的控制菜单项(也就是系统菜单)的ID号必须大于 0xF000。如果某个应用程序要添加系统菜单,
    其系统菜单的 ID 号必须小于F000。”
    接下来,用 GetSystemMenu 函数获取系统菜单指针。调用时使用参数 FALSE 获取指针。如果用 TRUE 作为参数,那么该函数会将菜单重置回缺省状态。
    如果得到的指针有效,接着调用菜单添加命令在系统菜单后面添加菜单项,传递菜单IDs以及菜单显示时所用的字符串。

    处理定制的菜单命令

    为了让这些系统菜单命令工作起来,我们不能依赖常规的菜单消息处理机制----即便菜单项相同。通常系统菜单通过 WM_SYSCOMMAND 消息处理: void CBabelOnDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    //trap our own system menu messages
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
    CAboutDlg dlgAbout;
    dlgAbout.DoModal();
    } else if ((nID & 0xFFF0)==SC_CLOSE){
    OnClose();
    } else if ((nID & 0xFFF0)==IDM_EXIT) {
    ::PostQuitMessage(0);
    }
    else {
    CDialog::OnSysCommand(nID, lParam);
    }
    }
    通过比较传入的菜单ID进行相应的处理。注意代码中又有两个“nID & 0xFFF0”,这主要也是解决 Windows 95 的 bug。如果选择“退出”,那么会向应用程序发送退出消息:::PostQuitMessage(0)。
    注意第二个条件检查:SC_CLOSE 是个预定义的菜单常量。一般它是由 Windows 处理的,因为在例子程序中我们对它进行了定制,所以必须要自己处理它。本来 SC_CLOSE 是退出程序,但例子程序我们把它的行为改写成隐藏对话框,也就是将应用变成一个托盘小图标,处理例程见 OnClose() 函数。如果传入的菜单ID不等于任何定制的菜单项,那么就让 Windows 对它进行默认处理: CDialog::OnSysCommand(nID, lParam);
    下面是几个最常用的系统菜单命令:
    菜单 说明
    SC_CLOSE 关闭 CWnd 对象
    SC_MAXIMIZE 或者 SC_ZOOM 最大化 CWnd 对象
    SC_MINIMIZE 或者 SC_ICON 最小化 CWnd 对象
    SC_MOVE 移动 CWnd 对象
    SC_RESTORE 恢复窗口的正常位置和大小
    SC_SIZE 改变 CWnd 对象大小

    其它的几个系统菜单命令一般都是在特殊情况下才使用,有关细节请参考有关 WM_SYSCOMMAND 的文档。

    修改现有的菜单命令

    我们已经看到,系统菜单本身默认的处理行为是可以改变的,除此之外,系统菜单项的描述文本也是可以改变的,甚至还可以删除它们。为了修改才单命令的描述文本,我们可以用 pSysMenu 指针调用 ModifyMenu() 函数。例如,如果想要把“关闭”菜单项改成“隐藏”,可以象下面这么做:

    pSysMenu->ModifyMenu(SC_CLOSE, MF_BYCOMMAND,IDM_HIDE, "隐藏(&H)");
    MF_BYCOMMAND 参数告诉该函数将 SC_CLOSE 解释为命令 ID。IDM_HIDE 是新的菜单 ID。最后一个参数是菜单项的说明文本。还有一种调用 ModifyMenu() 的方法是使用 菜单项索引作为参数: pSysMenu->ModifyMenu(0,MF_BYPOSITION,IDM_HIDE,"隐藏(&H)");
    第一个参数 0 表示菜单项的索引,指第一个菜单。

    删除菜单命令

    例子程序拟将去掉系统菜单中的窗口“关闭”命令,暂且不说这样做是否合适,但是我们能做到这一点: pSysMenu->RemoveMenu(SC_CLOSE,MF_BYCOMMMAND);
    pSysMenu->RemoveMenu(0,MF_BYPOSITION);
    第一行代码删除了与 SC_CLOSE 关联的菜单命令。而第二行代码表示删除系统菜单命令中的第一项。

    用这种方式修改系统菜单尽管限定了应用程序的某些行为,但对于小型应用和实用程序来说有时是很有用的,尤其是当你想要从任务栏存取菜单命令时----也就是程序在后台运行或者以最小化方式运行,右键单击任务栏图标将弹出系统菜单。

     
    展开全文
  • VC 窗体内判断鼠标是否被点击,弹出对话框,在主窗口区点击左键,程序检测出你点击了鼠标上的左键,会弹出一个提示,告诉用户。这是VC编程百例中的一个小例子,虽然简单,但参考一下也不枉事。
  • CMenu newMenu; // 加载菜单资源 newMenu.LoadMenu(IDR_MENU_DLG...// 为对话框设置菜单 this->SetMenu(&newMenu); //添加工具栏 /*创建第二个工具栏*/ if (!m_myToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CH
    CMenu newMenu;
    // 加载菜单资源
    newMenu.LoadMenu(IDR_MENU_DLG); //IDR_MENU_DLG为新建的菜单资源
    // 为对话框设置菜单

    this->SetMenu(&newMenu);


    //添加工具栏

    /*创建第二个工具栏*/
    if (!m_myToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_myToolBar.LoadToolBar(IDR_MYTOOLBAR16))
    {
    TRACE0("Failed to create toolbar\n");
    return -1;      // fail to create
    }
    /*让此工具栏可以使用256色的图标*/
    m_myToolBar.LoadTrueColorToolBar( 16,
    IDB_MYNOR16,
    IDB_MYNOR16,
    IDB_MYDIS16);
    /*设置工具栏按钮文本*/
    for (int n=0;n<m_myToolBar.GetCount();n++)
    {
    UINT nID=m_myToolBar.GetItemID(n);
    CString strText=_T("");
    if (!strText.LoadString(nID))
    {
    continue;
    }
    int nIndex=strText.Find(_T('\n'));
    if (nIndex<0)
    {
    continue;
    }
    strText=strText.Right(strText.GetLength()-nIndex-1);
    m_myToolBar.SetButtonText(n,strText);
    }
    /*设置工具栏按钮尺寸*/
    CRect rect;
    m_myToolBar.GetItemRect(0,&rect);
    m_myToolBar.SetSizes(rect.Size(),CSize(16,16));
     
    //   创建工具条并调入资源   
    //   if(!m_wndToolBar.Create(this)   ||   !m_wndToolBar.LoadToolBar(IDR_MYTOOLBAR1))   
    //   {   
    //   TRACE0("Failed   to   Create   Dialog   Toolbar\n");   
    //   EndDialog(IDCANCEL);   
    //   }
    /*或者像下面这样,看你要哪种风格。
    if(!m_wndToolBar. CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)   ||   !m_wndToolBar.LoadToolBar(IDR_TOOLBAR1))   
      {   
      TRACE0("Failed   to   Create   Dialog   Toolbar\n");   
      EndDialog(IDCANCEL);   
      }   */   
        
      CRect rcClientOld;   //   旧客户区RECT   
      CRect rcClientNew;   //   加入TOOLBAR后的CLIENT   RECT   
      GetClientRect(rcClientOld);  
      //重新计算RECT大小   
      RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rcClientNew);     //所有的子窗口将被移动,以免被TOOLBAR覆盖    
      //计算移动的距离   
      CPoint   ptOffset(rcClientNew.left-rcClientOld.left,   
      rcClientNew.top-rcClientOld.top);   
        
      CRect rcChild;   
      CWnd* pwndChild   =   GetWindow(GW_CHILD);     //得到子窗口   
      while(pwndChild)   //   处理所有子窗口   
      {//移动所有子窗口   
      pwndChild->GetWindowRect(rcChild);   
      ScreenToClient(rcChild);     
      rcChild.OffsetRect(ptOffset);     
      pwndChild->MoveWindow(rcChild,FALSE);     
      pwndChild   =   pwndChild->GetNextWindow();   
      }   
        
      CRect rcWindow;   
      GetWindowRect(rcWindow);   //   得到对话框RECT   
      rcWindow.right   +=   rcClientOld.Width()   -   rcClientNew.Width();   //   修改对话框尺寸   
      rcWindow.bottom   +=   rcClientOld.Height()   -   rcClientNew.Height();     
      MoveWindow(rcWindow,FALSE);   //   Redraw   Window      
      RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); 




      //

    展开全文
  • RT,请有知情高手给与帮助。
  • 摘要:VC/C++源码,界面编程,对话框 VC++如何设置应用程序窗口中弹出对话框的默认颜色,一般情况下颜色是系统默认的窗体颜色,但是想改变它的颜色,变成自己想要的颜色怎么办呢?本例正是演示了这一小小的技巧,有...
  • VC6.0 MFC点击编辑框弹出对话框

    千次阅读 2017-08-31 09:10:17
    在写界面的用于触屏时,往往需要编辑框弹出盘来进行输入,下面就将我思路写一下吧, 1.刚开始在网让找一些这方面的资料,结果在论坛中有发现这样一个帖子,见面的链接: ... ...看过之后有一些思路,就是派生一个...

    在写界面的用于触屏时,往往需要编辑框弹出盘来进行输入,下面就将我思路写一下吧,

    1.刚开始在网让找一些这方面的资料,结果在论坛中有发现这样一个帖子,见面的链接:

    http://topic.csdn.net/u/20100630/15/728f2d71-6958-44ab-802e-e0dbc23f2e58.html

    看过之后有一些思路,就是派生一个编辑框类,在派生的类中处理PreTranslateMessage,

    于是写代码如下:

    BOOL CMyEdit::PreTranslateMessage(MSG* pMsg)  
    {
    // TODO: Add your specialized code here and/or call the base class
    if (pMsg->message == WM_LBUTTONDOWN)
    {
    HWND hWnd = ::GetFocus();
    int iID=::GetDlgCtrlID(hWnd);
    if(iID==IDC_EDIT1)
    {
    AfxMessageBox(_T("点我!"));
    }
    }
    return CEdit::PreTranslateMessage(pMsg);
    }

    可是还不能达到我的预期效果,第一次点击了编辑框1后无反应,在点二次编辑框1后,每次再点对话框的任何位置还是会弹出对话框,

    于是想,难道这种思路不对?

    但是突然间想到,在执行完AfxMessageBox(_T("点我!"));后接着执行了return CEdit::PreTranslateMessage(pMsg);

    所以跟以前没有什么 区别,于是在AfxMessageBox(_T("点我!"));后追加 return true;这样执行完AfxMessageBox(_T("点我!"));后

    就不执行了return CEdit::PreTranslateMessage(pMsg);试了一下,第一次点击了编辑框1后无反应,在点二次编辑框1后弹出相应的提示,

    每次再点对话框的任何位置不会弹出对话框,目标达到高兴中....

    但是问题又来了, 假如在对话中有两个编辑框,一个为编辑框1,另一个为编辑框2,则再按上面的代码写:

    BOOL CMyEdit::PreTranslateMessage(MSG* pMsg)  
    {
    // TODO: Add your specialized code here and/or call the base class
    if (pMsg->message == WM_LBUTTONDOWN)
    {
    HWND hWnd = ::GetFocus();
    int iID=::GetDlgCtrlID(hWnd);
    if(iID==IDC_EDIT1)
    {
    AfxMessageBox(_T("1"));
    }

    else if(iID==IDC_EDIT2)
    {
    AfxMessageBox(_T("2"));

    }

    }
    return CEdit::PreTranslateMessage(pMsg);
    }

    这样执行程序,发面在第一次点击了编辑框1后,如前面一样,无反应,在第二次编辑框1才执行AfxMessageBox(_T("1"));

    再点编辑框2,还是会执行AfxMessageBox(_T("1"));无语了,思来想去,原来是HWND hWnd = ::GetFocus();在做怪,因为

    这是在PreTranslateMessage中执行HWND hWnd = ::GetFocus();所以编辑框还没有得到焦点,此时还是编辑框1的

    焦点,把以还是执行AfxMessageBox(_T("1"));于是想着,不在PreTranslateMessage处理单击事件了,

    直接在Edit中的单击事件中处理,于是代码如下:

    void CMyEdit::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    HWND hwnd=::GetFocus();
    int iID=::GetDlgCtrlID(hwnd);
    if(iID==IDC_EDIT1)
    {
    AfxMessageBox("1");
    }
       else if(iID==IDC_EDIT2)
    {
    AfxMessageBox("2");
    }
    CEdit::OnLButtonUp(nFlags, point);
    }

    这样执行文件,效果达到了!!!


    展开全文
  • VC单文档点击菜单弹出对话框

    千次阅读 2011-02-25 15:37:00
    1.建立对话框;2.利用类向导为新建的对话框建立新的类,生成对应的.cpp,.h文件;3.菜单映射相应:添加相应函数 CDialog* dlg = new CDialog; dlg->Create(MAKEINTRESOURCE(IDD_SECTION));//此处ID要改为对话框的...

    1.建立对话框;

    2.利用类向导为新建的对话框建立新的类,生成对应的.cpp,.h文件;

    3.菜单映射相应:添加相应函数

    4.添加对话框的头文件;

    展开全文
  • VC编程中经常需要弹出选择文件夹对话框供用户选择目标文件夹 基本实现的源码如下: 1 void CTestDlg::OnBtnTest() 2 { 3 // TODO: Add your control notification handler code here 4 TCHAR pszPath...
  • 定时提醒任务功能。在设定的时间弹出对话框提醒用户。 3、任务安排:可由用户增加、删除、修改任务安排,并设定提示的时间。
  • VC 定时自动关闭MessageBox弹出对话框

    千次阅读 2011-08-25 16:16:17
    void CMessageboxDlg::OnBtnMessageBox() {  // TODO: Add your ... //只是限制于有×的messagebox对话框  keybd_event(13,0,0,0);  }  KillTimer(nIDEvent);  CDialog::OnTimer(nIDEvent); }
  • shellcode弹出对话框

    千次阅读 2011-11-11 12:38:11
    功能是弹出一个对话框。本段代码在VC6.0上编译通过,此shellcode能在所有windows系统上运行且屡试不爽。  char shellcode[]= "\xfc\x68\x6a\x0a\x38\x1e\x68\x63\x89\xd1\x4f\x68\x32\x74\x91\x0c" "\x8b\xf4\x8...
  • 我想再菜单栏里能弹出对话框,然后输入数值 ,我用来改变正弦曲线的波形.
  • VC弹出对话框的程序实例

    千次阅读 2007-11-29 08:31:00
    最近做一个项目,按一个扩展键,程序会设置CPU风扇的工作模式,同时屏幕的右下角会弹出一个提示框,提示风扇的状态。其中弹出提示框这个木框时技术的一个难点,我刚开始试着自己去写,发现比较难,最后在codeproject...
  • VC6.0 MFC框架树结构上右键点击,出现一个竖菜单,再点击其中一个菜单项弹出对话框,但是对话框点不了。 如果点击一下程序以外的地方,比如桌面啥的,再回来点击对话框就可以了。求问各位大神,这是什么原因啊??...
  • 我已经获取了文件路径,GetPathName,如何再获取文件中的数据 txt文件中的数据格式是这样的, 1 2 3 4 5 6 请问我接下来该怎么操作,才能使各个数据全部被提取出来。
  • 主界面上先弹出一个模态对话框,上面有一个表格控件,然后点击该界面上的一个按钮,在弹出另外一个模态对话框,正常的话前一个界面应该显示正常的,可是在测试的机子上(win7系统)出现过几次表格控件全部变空白的...
  • VC/MFC对话框的动画弹出和动画消隐 最近看到一篇文章《谈对话框的动画弹出和动画消隐》,文章提到了利用定时器实现对话框动画的效果,比葫芦化瓢,却发现不但没有动画,而且连窗口也没有了,经过简单的修改,终于...
  • 首先创建如下的对话框,并为它创建类Dialog,然后添加一个按钮设置按钮ID为IDC_BTN_VIEW,为按钮添加消息响应函数OnBtnView(),并添加如下代码。 //这个函数可以设置为全局函数//显示文件夹对话框,返回选中文件夹...
  • 源码实现在窗口指定区域点击鼠标右键,弹出字体设置对话框,在对话框中可设置窗口内的文字样式和颜色以及大小,就和Windows的字体对话框功能是一样的。 运行环境:Visual Studio2010
  • VC 位图皮肤对话框 皮肤切换 拖动 用一副位图作为皮肤美化对话框 对话框 样式弹出边框无

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 996
精华内容 398
关键字:

vc弹出对话框