在一个含有很多静态控件的Dialog中,是各控件先构造还是dialog先?各个控件的构造顺序如何安排?

tbwisess 2004-07-31 04:41:57
是不是dialog先??
各个其他控件呢?
一般Dialog构造函数和initdialog分别做什么?
(initdialog用于初始化控件?)
...全文
147 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wqfclz 2004-07-31
  • 打赏
  • 举报
回复
OnInitDialog函数用来初始化"需要初始化"的对话框控件,以设定控件的参数,动作,和初始状态.
当然是先构造对话框(包容器),再构造控件对象了.
楼上的繁体文本是从哪本书上拷来的,怎么那么乱?
Kudeet 2004-07-31
  • 打赏
  • 举报
回复
繁体啊,看的头晕哦 我也是啊!


肯定是先有父窗口对话框,才有儿子窗口的。^_^

构造函数就是对这个对象操作,能完成基本的操作,很多时候我们重载ONINITDIALOG函数来做些自己需要的事情
RockHwnd 2004-07-31
  • 打赏
  • 举报
回复
繁体啊,看的头晕哦
tbwisess 2004-07-31
  • 打赏
  • 举报
回复
那么一般Dialog构造函数和initdialog分别做什么?
wenxi2004 2004-07-31
  • 打赏
  • 举报
回复
应当先有父后有子吧
maxcode 2004-07-31
  • 打赏
  • 举报
回复
这是Windows产生对话框的原理:
函式原型:
HWND CreateDialogIndirectParam(HINSTANCE hinst, PCDLGTEMPLATEEX pDlgTemplate,
HWND hwndOwner, DLGPROC pfnDlgProc, LPARAM lParamInit);
第二個參數pDlgTemplate ,必須指向對話盒面板的二進位碼。CreateDialogIndirectParam
會開始剖析這塊記憶體,動作如下:
1. 將任何DS_* 型態轉換為WS_* 型態。例如DS_MODALFRAME 轉換為
WS_EX_DLGMODALFRAME ,DS_CONTEXTHELP 轉換為WS_EX_CON
TEXTHELP ,WS_DLGFRAME 轉換為 WS_EX_WINDOWEDGE 3 。
2. 如果DS_FONT 被指定,CreateFontIndirect 會根據記憶體區塊中的FONTINFOEX
結構內容,產生一種邏輯字型。
3. 對話盒的寬度和高度可經由MapDialogRect 函式轉換成以圖素(pixel )為單位
的值。
4. 呼叫CreateWindowEx 並使用DLGTEMPLATEEX 結構內的欄位來產生父視
窗。就這父視窗而言,其擴充風格、類別名稱、標題文字、視窗風格、x 座標、
y 座標、寬度、高度和選單資訊都已記錄在DLGTEMPLATEEX 結構之中,而
產生對話盒主視窗時,不論 DS_CONTROL 是否被指定,CreateDialogIndirectParam 總是都會內含
視窗擴充風格 WS_EX_CONTROLPARENT 。

CreateWindowEx 的hInstance 參數和hwndParent 參數(是的,父視窗也可以有
擁有者或是父視窗),將使用CreateDialogIndirectParam 所獲得的hinst 和
hwndOwner 參數。
當我們使用Visual C++ 來設計對話盒時,大部份時候我們並不會自己指定視窗類別
名稱。如果沒有指定視窗類別名稱,當CreateDialogIndirectParam 呼叫CreateWindowEx
時,會傳入內建的對話盒視窗類別名稱。對話盒類別是一個 “system global” 視窗類
別,但卻不像其它 “system global” 視窗類別一樣有一個優雅的名稱(如ListBox 或
Edit 等等)。這個類別沒有名稱,只有一個代碼:#32770 ,那也就是此一類別的 atom
值。由於這是一個 “system global” 視窗類別,微軟也為它提供了一個視窗函式,放
在 User32.DLL 之中,其視窗函式名為 DefDlgProc ,下一節我們將詳加討論之。
5. 如果面板的help ID 不為0 ,SetWindowContextHelpId 函式會被呼叫,並傳入父
視窗代碼及help ID :
BOOL SetWindowContextHelpId(HWND hwnd, DWORD dwContextHelpId);
如果使用者在對話盒中要求 Help ,視窗函式會收到一個 WM_HELP 訊息,其lParam
參數指向一個 HELPINFO 結構,結構中的dwContextId 欄位將擁有對話盒的help
ID 。
6. 如果DS_SETFONT 被指定,父視窗會收到一個 WM_SETFONT 訊息。
至此,父視窗已經產生出來並初始化了。CreateDialogIndirectParam 會再根據每一個
DLGITEMTEMPLATEEX 結構,產生一個子視窗:
7. 每一個子視窗的產生,都是靠DLGITEMTEMPLATEEX 結構以及呼叫
CreateWindowEx 函式來完成的。每一個子視窗的擴充風格4 、類別名稱、標題
文字、視窗風格以及ID 資訊都已記錄在記憶體中。x 座標、y 座標、寬度和高
度首先會被轉換為以圖素為單位(原本是所謂的對話盒單位)。至於
CreateDialogIndirectParam 函式當欲產生子視窗時,總是會包含WS_EX_NOPARENTNOTIFY 延伸
視窗型態。

CreateDialogIndirectParam 所獲得的 hinst 值以及才剛被產生的父視窗代碼,將
分別做為CreateWindowEx 的hInstance 和hwndParent 參數。
8. 如果子視窗不能產生,CreateDialogIndirectParam 函式會摧毀父視窗和所有已經
產生出來的子視窗,並傳回NULL 。然而,藉由DS_NOFAILCREATE 的指定,
你可以改變這種預設行為。假如指定了DS_NOFAILCREATE 給父視窗,則
CreateDialogIndirectParam 函式會繼續產生其餘子視窗並傳回其視窗代碼給父
視窗,再傳回給呼叫者。
9. 如果子視窗有一個help ID ,而且不是0 ,那麼SetWindowContextHelpId 會被呼
叫,並傳入子視窗代碼和help ID 。如果使用者在子視窗中要求help 功能,對
話盒視窗函式會收到一個WM_HELP 訊息,其lParam 參數指向一個HELPINFO
結構,結構中的dwContextId 欄位表現出子視窗的help ID 。
10. WM_SETFONT 訊息會被送往子視窗,告訴子視窗應使用何種字型來顯示文
字。
現在,在父視窗及其所有子視窗都已產生之後,CreateDialogIndirectParam 送出一個
WM_INITDIALOG 訊息給父視窗。而此訊息的lParam 參數值就是
CreateDialogIndirectParam 的 lParamInit 參數值。
目录 ······ 第1章 Android简介 1.1 一些背景信息 1.1.1 不远的过去 1.1.2 未来的前景 1.2 对Android的误解 1.3 开放的移动开发平台 1.4 自带的Android应用程序 1.5 Android SDK功能 1.5.1 对包括摄像头、GPS和加速计在内的硬件的访问 1.5.2 自带的Google地图、地理编码和基于位置的服务 1.5.3 后台服务 1.5.4 SQLite数据存储和检索数据库 1.5.5 共享数据和应用程序间通信 1.5.6 使用Google Talk的P2P服务 1.5.7 扩展的数据支持和2D/3D图形 1.5.8 优化的内存和进程管理 1.6 开放手机联盟简介 1.7 运行Android的环境 1.8 从事Android开发的原因 1.8.1 推动Android普及的因素 .1.8.2 Android的独到之处 1.8.3 改变移动开发格局 1.9 开发框架简介 1.9.1 开发包的资源 1.9.2 理解Android软件栈 1.9.3 Dalvik虚拟机 1.9.4 Android应用程序架构 1.9.5 Android库 1.9.6 高级Android库 1.10 小结 第2章 开始入手 2.1 Android开发 2.1.1 开始前的准备工作 2.1.2 创建第一个Android活动 2.1.3 Android应用程序的类型 2.2 面向移动设备的开发 2.2.1 关于硬件设计的考虑事项 2.2.2 考虑用户环境 2.2.3 Android开发 2.3 To-Do List示例 2.4 Android开发工具 2.4.1 Android模拟器 2.4.2 Dalvik调试监控服务(DDMS) 2.4.3 Android调试桥(ADB) 2.5 小结 第3章 创建应用程序和活动 3.1 Android应用程序的组成部分 3.2 程序清单简介 3.3 使用清单编辑器 3.4 Android应用程序生命周期 3.5 理解应用程序的优级和进程状态 3.6 分离资源 3.6.1 创建资源 3.6.2 使用资源 3.6.3 To-DoList资源示例 3.6.4 为不同的语言和硬件创建资源 3.6.5 运行时配置更改 3.7 深入探讨Android活动 3.7.1 创建一个活动 3.7.2 活动生命周期 3.7.3 Android活动类 3.8 小结 第4章 创建用户界面 4.1 Android UI基本设计 4.2 View简介 4.2.1 使用View创建Activity(活动)用户界面 4.2.2 Android Widget工具箱 4.3 布局简介 4.4 创建新的View 4.4.1 修改现有的View 4.4.2 创建复合控件 4.4.3 创建定制的Widget和控件 4.4.4 使用定制的控件 4.5 创建和使用菜单 4.5.1 Android菜单系统简介 4.5.2 定义活动的菜单 4.5.3 动态更新菜单项 4.5.4 处理菜单选择 4.5.5 子菜单和上下文菜单 4.5.6 To-Do List示例续 4.6 小结 第5章 Intent、广播接收器、 Adapter和Internet 5.1 Intent简介 5.1.1 使用Intent来启动活动 5.1.2 使用Intent Filter来为隐式Intent提供服务 5.1.3 使用Intent Filter作为插件和扩展 5.1.4 使用Intent来广播事件 5.2 Adapter简介 5.2.1 Android提供的部分Adapter简介 5.2.2 使用Adapter绑定数据 5.3 使用Internet资源 5.3.1 连接到Internet资源 5.3.2 利用Internet资源 5.4 Dialog简介 5.4.1 Dialog类简介 5.4.2 使用活动作为对话框 5.5 创建一个地震查看器 5.6 小结 第6章 数据存储、检索和共享 6.1 Android的数据保存技术 6.2 保存简单的应用程序数据 6.2.1 创建和保存preference 6.2.2 检索共享的preference 6.2.3 保存活动状态 6.2.4 为地震查看器创建一个Preference页 6.3 保存和载入文件 6.3.1 将静态文件作为资源添加 6.3.2 文件管理工具 6.4 Android的数据库 6.4.1 SQLite简介 6.4.2 Cursor和内容值 6.4.3 使用Android数据库 6.5 内容提供器简介 6.5.1 使用内容提供器 6.5.2 本地Android内容提供器 6.5.3 创建一个新的内容提供器 6.5.4 创建和使用地震内容提供器 6.6 小结 第7章 地图、地理编码和基于位置的服务 7.1 使用基于位置的服务 7.2 使用Test Proyider构建模拟器 7.2.1 更新模拟位置提供器的位置 7.2.2 创建一个应用程序来管理Test Location Provider 7.3 选择——个Location Provider 7.3.1 查找可用的提供器 7.3.2 根据要求标准查找提供器 7.4 确定自己所在的位置 7.4.1 “Where Am I”示例 7.4.2 追踪移动 7.4.3 更新“WhereAmI”示例的位置 7.5 使用邻近提醒 7.6 使用Geocoder 7.6.1 反向地理编码 7.6.2 前向地理编码 7.6.3 对“Where Am I”示例进行地理编码 7.7 创建基于地图的活动 7.7.1 MapView和MapActivity简介 7.7.2 创建一个基于地图的活动 7.7.3 配置和使用MapView 7.7.4 使用MapController 7.7.5 对“Where Am I”示例使用地图 7.7.6 创建和使用覆盖(Overlay) 7.7.7 MyLocationOverlay简介 7.7.8 ItemizedOverlay和Overlayltem简介 7.7.9 将View固定到地图和地图的某个位置上 7.8 对Earthquake示例添加地图功能 7.9 小结 第8章 后台工作 8.1 服务简介 8.1.1 创建和控制服务 8.1.2 将活动和服务绑定 8.2 使用后台工作线程 8.2.1 创建新的线程 8.2.2 为GUI操作同步线程 8.2.3 将Earthquake Service移动到后台线程 8.3 创建一个Toast 8.3.1 定制Toast 8.3.2 在工作(worker)线程使用Toast 8.4 Notification简介 8.4.1 Notification Manager简介 8.4.2 创建Notification 8.4.3 触发Notification 8.4.4 向Earthquake Monitor添加Notiflcation 8.4.5 高级Notification技术 8.4.6 持续的和连续的Notification 8.5 使用Alarm 8.6 使用Alarm更新Earthquake 8.7 小结 第9章 P2P通信 9.1 Android即时消息简介 9.1.1 使用GTalk服务 9.1.2 和GTalk服务绑定 9.1.3 建立GTalk连接,开始一个IM会话 9.1.4 在线状态和联系人列表简介 9.1.5 管理聊天会话 9.1.6 发送和接收数据信息 9.2 SMS简介 9.2.1 在应用程序使用SMS 9.2.2 发送SMS信息 9.2.3 监听SMS消息 9.2.4 紧急响应的SMS示例 9.2.5 紧急响应自动化 9.3 小结 第10章 访问Android硬件 10.1 使用媒体API 10.1.1 播放媒体资源 10.1.2 录制多媒体 10.2 使用摄像头 10.2.1 控制摄像头设置 10.2.2 使用摄像头预览 10.2.3 照相 10.3 Sensor Manager简介 10.4 使用加速计和指南针 10.4.1 加速计介绍 10.4.2 检测加速度的改变 10.4.3 创建一个速度计 10.4.4 确定方向 10.4.5 创建指南针和地平仪 10.5 Android电话功能 10.5.1 打电话 10.5.2 监控电话状态和电话活动 10.5.3 监控数据连通性和活动 10.5.4 访问手机的属性和状态 10.5.5 控制电话 10.6 使用蓝牙 10.6.1 蓝牙服务介绍 10.6.2 控制本地蓝牙设备 10.6.3 发现并配对蓝牙设备 10.6.4 管理蓝牙连接 10.6.5 使用蓝牙进行通信 10.6.6 使用蓝牙耳机 10.7 管理网络和Wi-Fi连接 10.7.1 监控和管理Internet连接 10.7.2 管理活动的连接 10.7.3 管理你的Wi-Fi 10.8 控制设备震动 10.9 小结 第11章 Android高级开发 11.1 Android的安全性 11.1.1 Linux内核安全 11.1.2 权限简介 11.1.3 声明和实施权限 11.1.4 为广播Intent实施权限 11.2 使用AIDL来支持服务IPC 11.3 使用Internet服务 11.4 构建内容丰富的用户界面 11.4.1 使用动画 11.4.2 使用主题来为应用程序添加皮肤 11.4.3 高级画布绘图 11.4.4 SurfaceView简介 11.4.5 创建交互式控件 11.5 小结

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧