Dialog & Windows 使用技巧 (2)

21.控制对话框最大最小尺寸


    (1) 对话框的属性的必须是resizing的
    (2) 打开classwizard->class info标签页->message filter中选择window
    (3) 添加 WM_GETMINMAXINFO 消息映射
        void CTest6Dlg::OnGetMinMaxInfo(MINMAXINFO *lpMMI)
        {
             lpMMI->ptMinTrackSize = CPoint(200, 200);
        }


22. 创建无模式对话框


Q103788:
Creating a Modeless Dialog Box with MFC Libraries
http://support.microsoft.com/kb/103788/EN-US/

Visual C++ MFC Samples    
MODELESS Sample: Uses a CDialog Object as a Modeless Dialog Box
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcsample/html/_sample_mfc_MODELESS.asp


23.在对话框中改变菜单项状态(enable/disable, check/uncheck, change text)


Q242577:
You cannot change the state of a menu item from its command user-interface handler if the menu is attached to a dialog box in Visual C++
http://support.microsoft.com/kb/242577/en-us


24. 按下F1出现帮助


Q141724:
Context-Sensitive Help in a CDialog Object
http://support.microsoft.com/kb/141724/en-us


msdn中的介绍
http://msdn2.microsoft.com/en-us/library/dyd1yfww.aspx

或者如果你要屏蔽按下F1后出现的“
找不到*.hlp文件”的提示对话框
添加 WM_HELPINFO 消息映射
BOOL CTest6Dlg::OnHelpInfo(HELPINFO* pHelpInfo)
{
     return TRUE;
    //return CDialog::OnHelpInfo(pHelpInfo);//屏蔽该句
}



25. 对话框初始化设置输入焦点的问题

默 认情况下,对话框初始化显示的焦点按照在对话框编辑期间设置的tab order的第一个控件来设置的。(设置tab order可在对话框的resource view中用Ctrl+D显示出来,点鼠标进行顺序设置)。如果想人为的改变初始化时的输入焦点,可在对话框的OnInitDialog中把 return TRUE; 改为 return FALSE;

MSDN上的解释如下:
Return Value

Specifies whether the application has set the input focus to one of the controls in the dialog box. If OnInitDialog returns nonzero, Windows sets the input focus to the first control in the dialog box. The application can return 0 only if it has explicitly set the input focus to one of the controls in the dialog box.



26. 在对话框间传递数据

CDlg1::OnButton1()
{
      CDlg2 dlg2;
      dlg2.m_str = _T("你好"; )
      dlg2.m_bJudge = TRUE;
      dlg2.DoModal();
}

//Dlg2.h
public:
     CString m_str;
     BOOL m_bJudge;


//Dlg2.cpp
CDlg2::OnInitDialog()
{
    if (m_bJudge)
        GetDlgItem(IDC_EDIT1)->SetWindowText(m_str);
}




27. 在 dlg1 中打开 dlg2 时,dlg2 能修改 dlg1 中的成员变量


//dlg1.cpp

    #include "dlg2.h"
    CDlg1::OnButton1()
    {
          CDlg2 dlg2;
          dlg2.m_pDlg1 = this;
          dlg2.DoModal();
    }

//dlg2.h
class CDlg1;//添加dlg1类的声明
class CDlg2 : public CDialog
{
...
public:
    CDlg1 *m_pDlg1;
}

//dlg2.cpp
#include "dlg1.h"

至此,你可以在dlg2.cpp中通过m_pDlg1操作CDlg1类中的成员变量了。




28. 改变对话框字体,对话框大小改变的问题


Q145994:
How to calculate dialog box units based on the current font in Visual C++
http://support.microsoft.com/kb/q145994/

Q125681:
How To Calculate Dialog Base Units with Non-System-Based Font
http://support.microsoft.com/kb/125681/en-us




29. 进行大数据量计算的时候,导致界面挂起无响应的问题


    当在程序中需要进行大数据量计算的时候(比如搜索磁盘,大数据量传输等),由于这些计算过程是在界面线程(UI Process)中,由此引发了界面线程的消息阻塞。我们创建一个工作线程(worker thread)来处理计算过程,以解决该问题。
下面是一个简单的创建一个工作线程的实现:
//xxxdlg.h
static UINT MyThread(LPVOID pParam);
CWinThread* pMyThread;

//xxxdlg.cpp
CXXXDlg::OnButton1()
{
     pMyThread = AfxBeginThread(MyThread, this);
     pMyThread = NULL;
}

UINT CXXXDlg::MyThread(LPVOID pParam)
{
     CXXXDlg *pDlg = (CXXXDlg *)pParam;

     //这里添加计算过程

     return 0;
}


30. 工程资源的合并


以把B对话框的资源插入到A对话框为例:

(1) 生成一个*.ogx文件
    打开B工程,在ClassView中鼠标右键点击所需的对话框类,单击"Add to Gallery"。
    这时,会在 " C:/Program Files/Microsoft Visual Studio/Common/MSDev98/Gallery/工程B " 的目录下产生一个ogx文件。

(2) 插入该*.ogx文件
    打开A工程,选择菜单Project->Add To Project->components and controls... ,选择刚生成的ogx文件,然后Insert。
这时B对话框资源和对话框类就插入到A中了。。


31. 在网上可以找到很多有用的代码,我只是把一些常用的功能列出链接,方便查看


http://support.microsoft.com              
http://www.codeproject.com/dialog/
http://www.codeguru.com/Cpp/W-D/dislog/


改变对话框大小时同时改变控件大小

http://www.codeproject.com/dialog/easysize.asp
http://www.codeproject.com/dialog/resizabledialog.asp
http://www.vchelp.net/vchelp/archive.asp?type_id=5&class_id=1&cata_id=1&article_id=548&search_term=
http://www.vchelp.net/vchelp/archive.asp?type_id=5&class_id=1&cata_id=1&article_id=538&search_term=


如何在可变大小(resizing)的对话框中实现滚动窗口

Q262954:
How to create a resizeable dialog box with scroll bars in Visual C++
http://support.microsoft.com/default.aspx?scid=kb;en-us;262954
http://www.codeproject.com/dialog/scrollablechilddialog.asp


从某一点或某一边逐渐变大显示对话框

http://www.codeproject.com/dialog/canidialog.asp


一个重载的MessageBox类

http://www.codeproject.com/dialog/xmessagebox.asp


option设置对话框(左边是树,右边是子对话框)

实现原理:create多个child类型的对话框,然后全部hide,点击左边树的item时,显示相应子对话框。

Q103375:
MultiDlg.exe Demonstrates Dynamic Child Dialog Boxes
http://support.microsoft.com/kb/103375/en-us

http://www.codeproject.com/dialog/ezoptionsdlg.asp
http://www.codeproject.com/dialog/csettingsdlg.asp
http://www.codeguru.com/cpp/w-d/dislog/optionsdialogs/article.php/c1953/
http://www.codeguru.com/cpp/w-d/dislog/optionsdialogs/article.php/c2015/


实现MSN的右下角的消息弹出提示窗口

http://www.codeproject.com/dialog/statusbarmsgwnd.asp


Tip of the day(每日一贴)功能的实现
    
http://www.codeproject.com/dialog/XHTMLTipOfTheDay.asp
http://www.codeguru.com/cpp/w-d/dislog/tipoftheday/article.php/c4993/


不规则对话框
    
http://www.codeproject.com/dialog/SimpleIrregular.asp


扩展和收缩对话框
    
http://www.codeproject.com/dialog/dlgexpand.asp


对话框渐变色
    
http://www.codeproject.com/dialog/WinMakeInactive.asp


屏幕捕捉
    
http://www.codeproject.com/dialog/screencap.asp


对话框菜单添加“最近使用文件列表”功能
    
http://www.codeproject.com/dialog/rfldlg.asp


关闭对话框时,逐渐消失
   
http://www.codeguru.com/cpp/w-d/dislog/animation/article.php/c5063/


对话框背景bitmap
   
http://www.codeguru.com/cpp/w-d/dislog/bitmapsimages/article.php/c1877/


透明对话框
   
http://www.codeguru.com/cpp/w-d/dislog/miscellaneous/article.php/c5065/
http://www.codeguru.com/cpp/w-d/dislog/miscellaneous/article.php/c5019/


在对话框中创建view
   
http://www.codeguru.com/cpp/w-d/dislog/article.php/c5009/


Splash Screen

Q817372:
How to insert a splash screen in a dialog-based application by using Visual C++ .NET or Visual C++ 2005
http://support.microsoft.com/kb/817372/en-us

Q815376:
How to create and insert a splash screen in an SDI application or in an MDI application by using Visual C++ .NET or Visual C++ 2005
http://support.microsoft.com/kb/815376/en-us

http://www.codeguru.com/cpp/w-d/dislog/splashscreens/article.php/c2011/
http://www.codeguru.com/cpp/w-d/dislog/miscellaneous/article.php/c5019/
http://www.codeguru.com/cpp/w-d/dislog/splashscreens/article.php/c5029/


分割对话框

http://www.codeguru.com/cpp/w-d/dislog/splitterwindowswithingdialogs/article.php/c4973/
http://www.codeguru.com/cpp/w-d/dislog/splitterwindowswithingdialogs/article.php/c2031/
http://www.codeguru.com/cpp/w-d/dislog/splitterwindowswithingdialogs/article.php/c1979/


标题栏Title Bar
   
http://www.codeguru.com/cpp/w-d/dislog/titlebar/article.php/c1897/


添加状态栏statusbar和工具栏toolbar

Q123158:
Adding Control Bars to Foundation Classes Dialogs
http://support.microsoft.com/kb/123158/en-us

Visual C++ MFC Samples    
DLGCBR32 Sample: Demonstrates Adding a Status Bar and Toolbar to Dialog Boxes
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcsample/html/_sample_mfc_DLGCBR32.asp

http://www.codeguru.com/cpp/w-d/dislog/toolbarsandstatusbars/article.php/c1955/
http://www.codeguru.com/cpp/w-d/dislog/toolbarsandstatusbars/article.php/c1939/
http://www.codeguru.com/cpp/w-d/dislog/toolbarsandstatusbars/article.php/c1949/


Tooltip

Q141758:
How to add tooltips for controls to an MFC modal dialog box
http://support.microsoft.com/kb/141758/en-us

http://www.codeguru.com/cpp/w-d/dislog/tooltipsfordialogcontrols/article.php/c2017/
http://www.codeguru.com/cpp/w-d/dislog/tooltipsfordialogcontrols/article.php/c1843/   
http://www.codeguru.com/cpp/w-d/dislog/tooltipsfordialogcontrols/article.php/c1839/
http://www.codeproject.com/miscctrl/pptooltip.asp



从对话框边缘平滑弹出对话框

http://www.codeguru.com/cpp/w-d/dislog/miscellaneous/article.php/c5061/
有很多只有333页 我这个是完整版本 总共666页 序言 14 写作本书的原因 14 目标读者 15 作者编写的其他书籍 15 第一章 CTI通信基础知识 16 1.1 概述 16 1.2 电信技术概念和术语 16 1.2.1 模拟信号和数字信号 16 1.1.2 模拟线路和数字线路 18 1.1.3信令的基本概念 19 1.1.4 信令的分类 20 1.1.4 脉冲拨号和DTMF拨号 21 1.2 计算机语音技术相关标准 21 第二章 常用名词解释 23 2.1 CTI 23 2.2 呼叫处理 23 2.3呼叫处理的功能 24 2.3.1语音的存储转发(Store & Forward) 24 2.3.2识别键盘上的数字 24 2.3.3文语转换(Text-to-Speech) 24 2.3.4语音识别(Voice Recognition) 24 2.3.5电话呼出 25 2.3.6传真的存储与转发(Fax Store and Forward) 25 2.3.7传真合成 25 2.4呼叫处理的主要应用 25 2.4.1自动总机(Automated attendant) 25 2.4.2语音信箱(Voice mail) 25 2.4.3消息传递(Message delivery) 26 2.4.4可闻文本(Audiotex) 26 2.4.5按呼叫次数付费(pay-per-call) 26 2.4.6自动订购系统(Automated order entry) 26 2.4.7呼叫中心(Call center) 27 2.5通信基础术语 27 2.5.1电话线 27 2.5.2拨号音 27 2.5.3电话呼入 28 2.5.4拨号 28 2.5.5呼叫接续 28 2.5.6拍叉簧 29 2.5.7拆线 29 2.6语音卡工作原理 29 2.6.1计算机总线连接 29 2.6.2电话线接口 30 2.6.3语音总线 30 2.6.4操作系统支持 30 2.6.5电脑语音功能 31 2.6.6语音处理功能 32 2.6.7数字化方法 32 2.6.8采样速率 32 2.6.9每样值编码比特数 32 2.6.10自动增益控制(AGC) 32 2.6.11静音压缩SCR 32 2.6.12"特殊效果"处理 33 2.6.13信号音检测 33 2.6.14 DTMF/MF/脉冲拨号是什么 33 2.6.15 Fax集成 35 2.7硬件原理类概念 36 2.7.1处理器 36 2.7.2语音卡与PC机的接口 36 2.7.3 语音卡与电话网的接口 37 2.7.4资源总线 37 2.7.5固件原理 37 2.8 CTI应用程序接口API 38 2.8.1当前流行的API 38 2.8.2 TAPI 38 2.8.3 TSAPI 39 2.8.4 JTAPI 40 2.8.5 S.100 40 2.8.6 各种API分析比较 40 2.9 其它术语 41 2.9.1 PCM 41 2.9.2 ADPCM 41 2.9.3 AGC 41 2.9.4 CLASS 42 2.9.5 CO 42 2.9.6 DSP 42 2.9.7 NGN 42 第三章 数字通信技术基础 42 3.1 数字通信概述 42 3.2 什么是数字中继 44 3.3 E1 帧结构 45 3.4 中国1号数字线路信令 46 3.4.1 E1线路数据的编码格式 46 3.4.2 中国1号信令线路编码含义 46 3.4.3 局间信令 50 3.5 局间多频记发器信号方式 55 3.5.1记发器信号的功能、特点与要求 55 3.5.2 MFP和MFC 56 3.5.3 R2MF信令 57 3.5.4 记发器信号的传送方式 58 3.5.5多频记发器信号的种类及基本含义 60 3.5.6局间记发器信号的发送顺序 66 第四章 Dialogic基础知识 73 4.1 Dialogic公司介绍 73 4.2 Dialogic产品术语解释 73 4.3 Dialogic产品体系结构简介 74 4.4 Dialogic产品分类 75 4.4.1 模拟产品 76 4.5 Dialogic模拟卡编程相关概念和术语 76 4.6 安装Dialogic系统的软件和硬件 77 4.6.1 硬件需求 77 4.6.2 软件需求 78 4.6.3 安装Dialogic模拟卡 78 4.6.4 配置DCM(Dialogic配置管理) 78 4.7 什么是主叫识别 82 4.7.1主叫识别的功能和业务基本要求 82 4.7.2 主叫识别信息数据传送协议 82 4.7.3 数据的定义 83 4.8 Dialogic SDK开发和运行环境 84 第五章 Dialogic系列语音卡简介 85 5.1 低密度模拟语音卡系列 85 5.1.1 PROLINE/2V 2线多功能模拟语音卡 85 5.1.2 Dialogic/4和D/4PCI 半长型4线模拟语音卡 86 5.1.3 D/41H 4线模拟语音卡 87 5.1.4 D/41ESC和D/41EPCI 4线SC总线模拟语音卡 88 5.1.5 VFX/40ESC和VFX/PCI 4线模拟传真语音卡 89 5.1.6 D/160SC-LS 16线SC总线模拟语音卡 91 5.2 高密度数字语音卡系列 93 5.2.1 D/300SC-E1和D/300PCI-E1 30线数字中继语音卡 93 5.2.2 D/600SC-2E1 60线数字中继语音卡 95 5.3 DM3高密度平台系列 97 5.3.1 DM3 IPLink DM3高密度标准化IP语音平台 97 5.3.2 DM3高密度平台PCI cPCI 99 5.3.3 DM/F200及DM/F300传真资源卡 100 5.3.4 PCI QuadSpan系列 101 5.4 座席卡系列 102 5.4.1 MSI/SC-G座席卡 102 5.5 会议卡系列 104 5.5.1 DCB/SC基于DSP的会议卡 104 5.6 高密度ISDN BRI接口卡 105 5.6.1 BRI/80SC和BRI/160SC高密度ISDN BRI接口卡 105 5.7 过机卡 107 5.7.1 SCx过机卡 107 5.7.2 ATM服务器适配卡 108 5.8 GammaLink传真系列 108 5.8.1 GammaFax传真系列卡 108 5.9 企业传真卡系列 110 5.9.1 Cpi/3000CT-E1 30端口高密度传真卡 110 5.10 PBX集成平台 111 5.10.1 D/82JCT-U PBX集成平台(支持语音识别) 111 5.11 资源卡系列 113 5.11.1 SingleSpan-JCT/DualSpan-JCT JCT语音处理卡 113 5.11.2 D/41JCT-LS 4端口PCI模拟语音卡(支持语音识别) 115 5.11.3 D/120JCT-LS 12端口PCI模拟语音卡(支持语音识别) 118 5.12 SS7信令解决方案 120 5.12.1 Dialogic 7号信令方案 120 5.12.2 PCCS6-2E1 7号信令卡 121 5.12.3 DSC131单信令7号信令网关 122 5.12.4 DSC231 备份信令7号信令网关 123 5.13 软件产品 125 5.13.1 CT-Connect 呼叫控制软件 125 5.13.2 Dialogic CT Media开放平台及ICCP 126 第六章 Dialogic模拟卡程序设计 127 6.1 实现一个最简单的模拟卡程序 127 6.1.1 准备开发环境 127 6.1.2 打开Dialogic设备 128 6.1.3 等待电话呼叫 130 6.1.4 摘机应答 130 6.1.5 播放语音文件 130 6.1.6 挂机 131 6.1.7 关闭Dialogic设备 131 6.1.8 退出程序 131 6.1.9 编译和运行 132 6.1.10 提出问题 133 6.2 使用多线程 133 6.2.1 建立一个工作者线程(Worker Thread) 134 6.2.2 修改主函数 134 6.2.3 编译并运行 135 6.2.4 提出问题 136 6.3 使用异步模式 137 6.3.1 使用Dialogic事件通知机制 138 6.3.2 实现状态机 142 6.3.3 编译并运行 148 6.3.4 提出问题 156 6.4 总结 161 6.4.1 Dialogic软件系统架构及开发接口 161 第七章 了解Dialogic SRL 164 7.1 SRL术语表 164 7.2 SRL里有什么 164 7.3 静态连接 165 7.4 运行时链接 165 7.5 SRL事件管理 167 7.6 SRL用户数据管理 168 7.7 标准属性函数 171 7.8 I/O函数终止条件 171 第八章 SRL基本概念及基本编程模式 175 8.1 Dialogic SRL设备概念及基本编程模式 175 8.2 同步编程模式设计及实现 175 8.2.1 呼入应用系统编程框架 176 8.2.2 呼出应用程序编程框架 179 8.3 异步编程模式设计及实现 180 8.3.1 设计一个健壮的有限状态机及驱动函数 181 8.3.2 呼入应用系统的异步编程模型 186 8.3.3 呼出应用系统的异步编程模型 187 8.4 使用SRL扩展异步编程模式 187 8.5 基本SRL编程模式总结及辨析 190 8.5.1 SRL三种基本编程模式的特征 190 8.5.2 SRL三种基本编程模式的优点和弊端 190 8.5.3 SRL三种基本编程模式的选择标准 192 第九章 SRL高级概念及高级编程模式 193 9.1 SRL事件句柄定义及调用机制 193 9.1.1 回调函数定义 193 9.1.2 SRL回调机制 195 9.1.3 使用SRL级句柄服务线程 195 9.1.4 使用应用程序级句柄服务线程 196 9.2 SRL回调同步模式 196 9.2.1 什么是SRL回调同步模式 196 9.2.2 SRL回调同步代码例子 197 9.3 使用SRL回调异步模式 205 9.3.1 什么是SRL回调异步模式 205 9.3.2 SRL回调异步程序例子 205 9.4 使用Windows回调异步模式 209 9.4.1 什么是Windows回调异步模式 209 9.4.2 Windows回调异步程序例子 210 9.5 使用Win32同步机制回调异步模式 218 9.5.1什么是Win32同步机制异步模式 218 9.5.2 Win32同步异步模式例子 219 9.6 SRL高级编程模式总结及辨析 223 9.6.1 各种SRL高级编程模式的优点和弊端 223 9.6.2 高级SRL编程模式选择标准 224 第十章 Dialogic SRL API详解 226 10.1 SRL事件管理函数 226 10.1.1 事件处理函数 226 10.1.2 事件数据取回函数 227 10.1.3 SRL参数函数 227 10.2 标准属性函数 227 10.3 SRL事件管理函数及标准属性函数参考 227 sr_dishdlr() 禁止事件处理句柄 228 sr_enbhdlr() 启用事件句柄函数 230 sr_getboardcnt() 取回指定类型的卡数目 232 sr_GetDllVersion() 取回SRL DLL的版本号 234 sr_getevtdatap() 取回事件关联数据的内存地址 235 sr_getevtdev() 取回发生事件的设备 237 sr_getevtlen() 取回事件关联数据的字节长度 239 sr_getevttype() 取得当前事件的类型 240 sr_getparm() 取回SRL参数 242 sr_libinit() 初始化SRL DLL 243 sr_NotifyEvt() 将事件通知发送到Windows窗口 245 sr_putevt() 将一个事件送到SRL事件队列 248 sr_setparm() 设置SRL参数 250 sr_waitevt() 等待事件发生 254 sr_waitevtEx() 在某些设备上等待事件 256 第十一章 Dialogic语音功能概述 259 11.1 语音资源功能分类 260 11.2 PBXpert功能 260 11.3.2全局信号音产生GTG 261 11.3.3韵律信号音生成CTG 261 11.3.4全局拨号脉冲检测GDPD 263 11.3.5 R2MF信令 263 11.4 放音和录音功能 263 11.4.1 改变录音提示音长度 264 11.4.2 速度和音量控制 264 11.4.3 事务录音 264 11.4.4 WAVE文件偏移量放音 268 11.4.5 压缩式录音 268 11.4.6 回声消除资源 269 11.4.7 GSM和G.726语音编码 269 11.5 来电显示Caller ID 269 11.6 SC总线路由 269 11.7 Syntellect自动总机 269 11.8 模拟显示服务接口ADSI 270 第十二章 Dialogic数字卡编程 271 12.1 概述 271 12.2 D/300SC-E1卡的资源 272 12.2.1 资源分类及管理函数 272 12.2.2 资源的命名 272 12.3 编写一个处理呼入的D/300SC-E1程序 275 12.3.1 准备编程环境 276
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值