怎样初始化应用程序窗口

scklotz 2000-12-22 01:21:00
(单文档应用程序)
我想让应用程序启动的时候,让窗口的大小刚好充满整个屏幕。我不需要窗口以最大化的方式显示来实现。
还有一个问题,我想让应用程序启动的时候,不显示主窗口,而让它隐藏。但是不是那种一闪而逝的方式。
望各位大虾指点。先在这里谢过了:)
...全文
485 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
scklotz 2000-12-29
  • 打赏
  • 举报
回复
我也是偶尔收到
scklotz 2000-12-27
  • 打赏
  • 举报
回复
我只是偶尔收到邮件
ender 2000-12-25
  • 打赏
  • 举报
回复
系统是不是出问题了?
老给我乱发邮件!
你们有没收到?
scklotz 2000-12-25
  • 打赏
  • 举报
回复
我重载了CWinApp的OnFileNew(是消息响应吧,squiffy大虾?)结果程序闪都不闪一下,就退出了!
squiffy 2000-12-23
  • 打赏
  • 举报
回复
OnFileNew是WinApp的虚函数,所以你必须重载YourApp中的OnFileNew函数,你在frame和view重载没有用的。
mahongxi 2000-12-23
  • 打赏
  • 举报
回复
TO ping_fyp1130:
你真行!
我想说的你全说了!

。。。。对不起,我不是故意的。

算了,我没放在心上,以后不要这样了!!!

freeclick 2000-12-23
  • 打赏
  • 举报
回复
可能的。
scklotz 2000-12-22
  • 打赏
  • 举报
回复
to nichang
问题是我想在启动的时候就让他隐藏,而不是在运行的时候。你说的在对话框里是可以的,但我做的是单文档应用程序。框架的产生是由文档模板来实现的。
nichang 2000-12-22
  • 打赏
  • 举报
回复
我在基于对话框的程序启动时在OnPaint中使用showwindow(sw_hide)可以隐藏窗口,
在SDI或MDI中是否也可以试一下?
scklotz 2000-12-22
  • 打赏
  • 举报
回复
补充2:
我的程序是单文档模板,框架和视图的产生由pDocTemplate = new CSingleDocTemplate这个单文档模板函数来实现的。因此Smile_Tiger大虾说的“在InitInstance中去掉原来的框架,并实现CMyWnd的创建”我觉得不合适,谢谢!
scklotz 2000-12-22
  • 打赏
  • 举报
回复
补充:
我注释了在InitInstance()里的m_pMainWnd->Show();m_pMainWnd->UpdateWindows()
为了保险起见,同时重载了CMainFrame和CMyView里的OnFileNew,但窗口仍旧要显示。
scklotz 2000-12-22
  • 打赏
  • 举报
回复
对于第一个问题,squiffy大虾真是一语道破天机。
但是第二个问题却搞不定,即使我在CMainFrame和视图里都重载了OnFileNew函数都不行。
ping_fyp1130 2000-12-22
  • 打赏
  • 举报
回复
三、修改主框架窗口、子窗口及其显示性质

可通过覆盖CWnd的成员函数PreCreateWindow来修改主窗口和子窗口。PreCreateWindow函数在即将创建窗口前被调用,函数原型为:Virtual BOOL PreCreateWindow函数(CREATESTRUCT cs)。如果要覆盖PreCreateWindow函数,则在创建窗口前可以修改CREATESTRUCT结构以替换缺省参数。CREATESTRUCT结构存放窗口特征,如窗口坐标、风格等,还可以定义新窗口风格。

若想修改主框架窗口,则可以在MainFrm.cpp的下列成员函数中加入待修改的内容。例如:

BOOL CmainFrame::PreCreateWindow(CREATESTRUCT&cs)

{

//通过修改CREATESTRUCT结构来修改窗口类或风格

//定义新窗口的高度、宽度

cs.cx=450;

cs.cy=300;

//定义新窗口风格为去掉主窗口名及最大化等按钮

cs.style=ws-POPWINDO;

return CframeWnd::PreCreateWindow(cs);

}

定制子窗口的操作与上述主窗口相同,可在ChildFrm.cpp中加入以下内容:

BOOL CmainFrame::PreCreateWindow(CREATESTRUCT&cs)

{

//通过修改CREATESTRUCT结构来修改窗口类或风格

return C mdichildWnd::PreCreateWindow(cs);

}

要修改视图窗口的显示性质,则可在视图文件xxView.cpp的下述成员函数中加入以下语句:

BOOL xxView::PreCreateWindow(CREATESTRUCT&cs)

{

//增加的语句

cs.lpszClass=AfxRegisterWndClass(cs-HREDRAW|CS-VREDRAW,0,(HBRUSH))::GetStockObject(WHITE-BRUSH),0);

return CscrollView::PreCreateWindow(cs);

}

其中,cs的参数pszClass用于存放Windows窗口类名称。要想注册Windows窗口类,则必须调用全局函数AfxRegisterWndClass。该函数原型为:

LPCTSTR AFXAPI AfxRegisterWndClass(UINTnClassStyle,HCURSOR hCursor=0,HBRUSH hbrBackground=0,HICON hIcon=0)

上述各参数用于定义风格,其含义分别为光标资源句柄、背景资源句柄、图标资源句柄。上述增加的语句的作用是:改变窗口大小时重画窗口、不显示光标图标、设置白色背景。

Smile_Tiger 2000-12-22
  • 打赏
  • 举报
回复
提示有四
1. 派生CWnd 得到自己的类 CMyWnd
2. ::GetSystemMetrics(SM_CXSCREEN)可以得到屏幕横坐标,SM_YSCREEN得到纵坐标
3. 实现自己的CMyWnd::Create()

LPCTSTR classname = ::AfxRegisterWndClass(...);
return CWnd::CreateEx(...);

4.在InitInstance中去掉原来的框架,并实现CMyWnd的创建
wistaria 2000-12-22
  • 打赏
  • 举报
回复
RECT rect;
::GetWindowRect( ::GetDesktopWindow(), &rect );
SetWindowPos(&wndTopMost,
rect.left,
rect.top,
rect.bottom,
rect.right,
SWP_HIDEWINDOW);
MoveWindow( &rect, TRUE );
ender 2000-12-22
  • 打赏
  • 举报
回复
关于第一个问题,你可以取当前屏幕的解析度,然后把窗口的大小设为和屏幕一样大就行了!
sxbyl 2000-12-22
  • 打赏
  • 举报
回复
用GetSystemMetric可以得到屏幕的大小,然后你可以用SetWindowPos设置窗口大小
对于第二问题:如果你是SDI/MDI的,在InitInstance中ShowWindow(SW_HIDE),PreCreateWindow的cs参数也改一下(我没有试过)。如果是对话框框形式的,资源中将Visiable选项去掉
squiffy 2000-12-22
  • 打赏
  • 举报
回复
在app::initinstance函数里面,有一个p_mainwnd->show();p_mainwnd->updatewindows()
注释掉这两个语句,就可以隐藏。另外你得重载onfilenew函数,否则窗口还是会显示出来。onfilenew里面什么也不要做。
全屏:
重载 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)函数
cs.cy = ::GetSystemMetrics(SM_CYSCREEN);
cs.cx = ::GetSystemMetrics(SM_CXSCREEN);
《Android系统源代码情景分析》随书光盘内容(源代码) 目录如下: 第1篇 初识Android系统 第1章 准备知识 1.1 Linux内核参考书籍 1.2 Android应用程序参考书籍 1.3 下载、编译和运行Android源代码 1.3.1 下载Android源代码 1.3.2 编译Android源代码 1.3.3 运行Android模拟器 1.4 下载、编译和运行Android内核源代码 1.4.1 下载Android内核源代码 1.4.2 编译Android内核源代码 1.4.3 运行Android模拟器 1.5 开发第一个Android应用程序 1.6 单独编译和打包Android应用程序模块 1.6.1 导入单独编译模块的mmm命令 1.6.2 单独编译Android应用程序模块 1.6.3 重新打包Android系统镜像文件 第2章 硬件抽象层 2.1 开发Android硬件驱动程序 2.1.1 实现内核驱动程序模块 2.1.2 修改内核Kconfig文件 2.1.3 修改内核Makefile文件 2.1.4 编译内核驱动程序模块 2.1.5 验证内核驱动程序模块 2.2 开发C可执行程序验证Android硬件驱动程序 2.3 开发Android硬件抽象层模块 2.3.1 硬件抽象层模块编写规范 2.3.2 编写硬件抽象层模块接口 2.3.3 硬件抽象层模块的加载过程 2.3.4 处理硬件设备访问权限问题 2.4 开发Android硬件访问服务 2.4.1 定义硬件访问服务接口 2.4.2 实现硬件访问服务 2.4.3 实现硬件访问服务的JNI方法 2.4.4 启动硬件访问服务 2.5 开发Android应用程序来使用硬件访问服务 第3章 智能指针 3.1 轻量级指针 3.1.1 实现原理分析 3.1.2 应用实例分析 3.2 强指针和弱指针 3.2.1 强指针的实现原理分析 3.2.2 弱指针的实现原理分析 3.2.3 应用实例分析 第2篇 Android专用驱动系统 第4章 Logger日志系统 4.1 Logger日志格式 4.2 Logger日志驱动程序 4.2.1 基础数据结构 4.2.2 日志设备的初始化过程 4.2.3 日志设备文件的打开过程 4.2.4 日志记录的读取过程 4.2.5 日志记录的写入过程 4.3 运行时库层日志库 4.4 C/C++日志写入接口 4.5 Java日志写入接口 4.6 Logcat工具分析 4.6.1 相关数据结构 4.6.2 初始化过程 4.6.3 日志记录的读取过程 4.6.4 日志记录的输出过程 第5章 Binder进程间通信系统 5.1 Binder驱动程序 5.1.1 基础数据结构 5.1.2 Binder设备的初始化过程 5.1.3 Binder设备文件的打开过程 5.1.4 Binder设备文件的内存映射过程 5.1.5 内核缓冲区管理 5.2 Binder进程间通信库 5.3 Binder进程间通信应用实例 5.4 Binder对象引用计数技术 5.4.1 Binder本地对象的生命周期 5.4.2 Binder实体对象的生命周期 5.4.3 Binder引用对象的生命周期 5.4.4 Binder代理对象的生命周期 5.5 Binder对象死亡通知机制 5.5.1 注册死亡接收通知 5.5.2 发送死亡接收通知 5.5.3 注销死亡接收通知 5.6 Service Manager的启动过程 5.6.1 打开和映射Binder设备文件 5.6.2 注册为Binder上下文管理者 5.6.3 循环等待Client进程请求 5.7 Service Manager代理对象的获取过程 5.8 Service组件的启动过程 5.8.1 注册Service组件 5.8.2 启动Binder线程池 5.9 Service代理对象的获取过程 5.10 Binder进程间通信机制的Java接口 5.10.1 Service Manager的Java代理对象的获取过程 5.10.2 Java服务接口的定义和解析 5.10.3 Java服务的启动过程 5.10.4 Java服务代理对象的获取过程 5.10.5 Java服务的调用过程 第6章 Ashmem匿名共享内存系统 6.1 Ashmem驱动程序 6.1.1 基础数据结构 6.1.2 匿名共享内存设备的初始化过程 6.1.3 匿名共享内存设备文件的打开过程 6.1.4 匿名共享内存设备文件的内存映射过程 6.1.5 匿名共享内存块的锁定和解锁过程 6.1.6 匿名共享内存块的回收过程 6.2 运行时库cutils的匿名共享内存访问接口 6.3 匿名共享内存的C++访问接口 6.3.1 MemoryHeapBase 6.3.2 MemoryBase 6.3.3 应用实例 6.4 匿名共享内存的Java访问接口 6.4.1 MemoryFile 6.4.2 应用实例 6.5 匿名共享内存的共享原理 第3篇 Android应用程序框架 第7章 Activity组件的启动过程 7.1 Activity组件应用实例 7.2 根Activity组件的启动过程 7.3 子Activity组件在进程内的启动过程 7.4 子Activity组件在新进程中的启动过程 第8章 Service组件的启动过程 8.1 Service组件应用实例 8.2 Service组件在新进程中的启动过程 8.3 Service组件在进程内的绑定过程 第9章 Android系统广播机制 9.1 广播机制应用实例 9.2 广播接收者的注册过程 9.3 广播的发送过程 第10章 Content Provider组件的实现原理 10.1 Content Provider组件应用实例 10.1.1 ArticlesProvider 10.1.2 Article 10.2 Content Provider组件的启动过程 10.3 Content Provider组件的数据共享原理 10.3.1 数据共享模型 10.3.2 数据传输过程 10.4 Content Provider组件的数据更新通知机制 10.4.1 注册内容观察者 10.4.2 发送数据更新通知 第11章 Zygote和System进程的启动过程 11.1 Zygote进程的启动脚本 11.2 Zygote进程的启动过程 11.3 System进程的启动过程 第12章 Android应用程序进程的启动过程 12.1 应用程序进程的创建过程 12.2 Binder线程池的启动过程 12.3 消息循环的创建过程 第13章 Android应用程序的消息处理机制 13.1 创建线程消息队列 13.2 线程消息循环过程 13.3 线程消息发送过程 13.4 线程消息处理过程 第14章 Android应用程序的键盘消息处理机制 14.1 键盘消息处理模型 14.2 InputManager的启动过程 14.2.1 创建InputManager 14.2.2 启动InputManager 14.2.3 启动InputDispatcher 14.2.4 启动InputReader 14.3 InputChannel的注册过程 14.3.1 创建InputChannel 14.3.2 注册Server端InputChannel 14.3.3 注册系统当前激活的应用程序窗口 14.3.4 注册Client端InputChannel 14.4 键盘消息的分发过程 14.4.1 InputReader获得键盘事件 14.4.2 InputDispatcher分发键盘事件 14.4.3 系统当前激活的应用程序窗口获得键盘消息 14.4.4 InputDispatcher获得键盘事件处理完成通知 14.5 InputChannel的注销过程 14.5.1 销毁应用程序窗口 14.5.2 注销Client端InputChannel 14.5.3 注销Server端InputChannel 第15章 Android应用程序线程的消息循环模型 15.1 应用程序主线程消息循环模型 15.2 与界面无关的应用程序子线程消息循环模型 15.3 与界面相关的应用程序子线程消息循环模型 第16章 Android应用程序的安装和显示过程 16.1 应用程序的安装过程 16.2 应用程序的显示过程

16,472

社区成员

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

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

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