Window Feature 学习

本文详细介绍了Windows窗口的基本知识,包括窗口类型(如OverlappedWindows、Pop-upWindows)、窗口消息流程以及子窗口与父窗口之间的关系。通过实例展示了如何创建不同类型的窗口,并深入探讨了窗口间的操作和交互,提供了丰富的实践经验和理论指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从msdn上看到一篇文章,ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.WIN32COM.v10.en/winui/winui/windowsuserinterface/windowing/windows/windowfeatures.htm。文中主要讲一些windows窗口的基本知识,以及一些窗口的消息流程,对我这样对window系统不熟的人来说,感觉收获还是不小。做个学习笔记,强化一下记忆。

Window的窗口类型(Window Type)

Overlapped Windows

在window的头文件中,这种类型定义如下

#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED     | \
WS_CAPTION
| \
WS_SYSMENU
| \
WS_THICKFRAME
| \
WS_MINIMIZEBOX
| \
WS_MAXIMIZEBOX)

从定义可以看出,一个Overlapped window是有最大和最小按钮,有系统目录,有标题栏,有ThickFrame的。我们一般创建一个window应用程序,主窗体一般都是使用的这种,用vs2005向导生成的win32程序中,窗体也是使用的这种类型。除了WS_OVERLAPPEDWINDOW这种以外,还有一种称为WS_OVERLAPPED的,文中说这种类型的窗口是有titlebar和边框的。

我用CreateWindowEx创建一个WS_OVERLAPPED的窗口。运行显示,该窗口没有最大,最小和关闭按钮;在标题栏左上角业没有系统菜单;窗体的大小是不可以调整的。我加上WS_THICKFRAME后,大小就可以调增了。

Pop-up Windows

之前对这种窗口是一点概念也灭有,就是现在也不是很确定的。一个Popupwindow是一种特殊的overlapped窗口。 对于要出现在程序主窗口之外的对话框、message box等都使用这中类型。这种窗口的titlebar是可选的。否则就和一个WS_OVERLAPPED一样了。指定这种类型使用WS_POPUP,要加标题栏使用WS_CAPTION;WS_POPUPWINDOW可以创建一个带有边框和菜单的 Popup窗口。

我将vs生成的代码中的WS_OVERLAPPEDWINDOW改成了WS_POPUPWINDOW,程序能够编译运行,但是看不见窗口。?为什么? 下来在研究一下。经过测试发现,当我创建window时指定窗口的大小,而不使用CW_USEDEFAULT时会显示出窗口,难道对于popupwindow的CW_DEFAULT为0? 此时显示出来的窗口是没有标题栏的。

Child windows

有WS_CHILD类型的窗口是一个子窗口。一个子窗口必须要有父窗口的,子窗口不能有菜单。子窗体活动区域限制在父窗口中,而且他在主窗口之前被Destroy。在父窗体show之后才show,父窗体hide之前hide.

关于WS_CLIPCHILDREN,系统不会自动的从父窗口的区域中去除掉子窗口,也就是说父窗口有可能会在子窗口的位置上绘制东西。如果指定了该类型,那么父窗口就不能在子窗口的位置上绘制了。自己试验了一下,在父窗口未设置该样式,那么父窗口会在子窗口的位置上绘制,此时拖动窗体时,会产生闪烁,可以隐现子窗口的位置背后有父窗体绘制的东西,如果指定了,那么父窗口就不绘制子窗体区域,也不会闪烁,nice。

与WS_CLIPCHILDREN类似,WS_CLIPSIBLING的功能是针对兄弟窗口的。使用这两个样式会有性能上的损失。

子窗口可以通过SetParent来更换起父窗口。通过IsChild可以判断一个窗口是不是子窗口。EnumChildWindows会枚举出所有的子窗口。

对于窗口的消息循环,子窗口的消息直接发送给子窗口的窗口处理函数,而不经过父窗口,唯一的例外情况是子窗口被EnableWindow函数给Disabled掉了,此时子窗口的消息将会发送给父窗体。

子窗口一般都应该有一个指定的ID,当其和父窗口通信时,父窗口使用此ID来判断是哪一个此窗口在通信。这个ID可以在CreateWindow是通过hMenu参数传递进去。

Layered window

大概瞅了一下,发现这个窗口类型的内容很多,对我这样初级的还有点用不着,先知道有这么个东西就行了。

Message-Only windows

一个message-only窗口能够接受和发送消息,但是它不可见,没有z-order,也不能被枚举出来,不会接受广播消息。这个窗体只是简单的分发消息。指定HWND_MESSAGE或者一个message-only窗口作为父窗口,那么CreateWindowEx出来的窗口就是一个message-only窗口。通过FindWindowEx窗口可以检出message-only窗口。

窗口间的关系(Window Relationships)

foreground 和background 窗口

一个进程中会有多个执行的线程,而每个线程都可以创建若干窗口。用户当前工作窗口所属的线程称为foreground thread,对应的窗口称为foreground window, 其他的线程为background thread,他们创建的窗口为background window。

用户可以通过点击窗口、按ALT+Tab,ALT+Esc等方式来设置foreground window。通过GetForeGroundWindow可以获取到foreGround window的句柄。 SetForeGroundWindow可以设置,限于一个进程使用?还有一个AllowSetForegroundWindow函数好像也可以用,这个好像可以用来在不能进程间使用。

Owned Windows

这个不知道怎么翻译,应该是被拥有的窗口。一个overlapped或者popup窗体可以被另一个overlapped或者popup窗体。只有一个overlapped或者popup窗体能够称为一个owner窗体。一个子窗体不能成为一个owner窗口。一个owner窗口是一个top-level窗口。所有子窗口的子孙窗口的owner都是这个top-level窗口。

可以通过GetOwner函数(使用GW_OWNER)来得到窗口的owner窗口。

Z-order

这个主要是用来试着窗口之间的层叠关系。

待续。。。。。。。。。。。。。。。。。。。。。。。。

转载于:https://www.cnblogs.com/kwliu/archive/2011/07/30/2121861.html

<think>好的,我现在需要帮助用户在Windows 11上配置深度学习环境。根据用户提供的引用内容,我需要整合这些信息并给出一个清晰的步骤指南。首先,我应该回顾用户提供的参考资料,看看有哪些关键点需要涵盖。 引用[1]提到使用WSL(Windows Subsystem for Linux)和Docker来搭建环境,这样可以方便地管理虚拟环境,尤其是在需要CUDA支持的情况下。而引用[2]则给出了用户的硬件配置,包括NVIDIA RTX 3090显卡,这意味着用户有较强的GPU资源,需要正确安装驱动和CUDA工具包。 首先,我需要确定步骤的顺序。通常,深度学习环境搭建需要以下几个主要步骤:安装系统更新、配置GPU驱动、安装WSL、安装Docker,然后配置CUDA和深度学习框架。另外,引用[1]还提到Anaconda,但指出在涉及CUDA时可能不够,所以可能需要结合Docker使用。 接下来,我需要详细列出每个步骤的具体操作。例如,安装WSL需要以管理员身份打开PowerShell并运行命令,然后安装Ubuntu发行版。然后,安装NVIDIA驱动,确保支持CUDA。用户可能已经安装了显卡驱动,但需要确认版本兼容性。 然后,在WSL中安装Docker,这可能需要先配置Docker Desktop并集成WSL2。之后,安装NVIDIA Container Toolkit,这样Docker容器就可以使用GPU了。接着,在Docker中拉取预配置的深度学习镜像,比如PyTorch或TensorFlow的官方镜像,这些镜像已经包含了CUDA和cuDNN的支持。 另外,用户可能也需要了解如何在没有Docker的情况下使用Anaconda,虽然引用[1]指出这可能不够,但可以作为补充步骤。例如,在WSL中安装Miniconda,创建虚拟环境,然后安装PyTorch或TensorFlow的GPU版本。 需要特别注意各个步骤之间的依赖关系,比如WSL2需要先启用虚拟机平台和Linux子系统功能,而Docker Desktop需要WSL2作为后端。此外,CUDA版本需要与显卡驱动版本兼容,以及深度学习框架所需的CUDA版本匹配。 可能遇到的问题包括WSL安装失败、Docker无法启动、GPU在容器中不可用等。需要提醒用户检查系统更新,确保BIOS中虚拟化支持已启用,以及正确安装NVIDIA驱动和CUDA工具包。 最后,生成相关问题需要考虑用户可能遇到的后续问题,比如性能优化、常见错误处理、多框架配置等。</think>### Windows 11深度学习环境搭建步骤 #### 一、基础环境准备 1. **系统更新与组件启用** - 确保Windows 11已更新至最新版本(设置 > Windows更新) - 启用虚拟化功能: - BIOS中开启`Intel VT-x`或`AMD-V`(需重启进入BIOS设置) - PowerShell以管理员运行: ```powershell dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart ``` - 重启系统 2. **GPU驱动安装** - 安装NVIDIA显卡驱动(需匹配CUDA版本要求): - 访问[NVIDIA驱动下载页](https://www.nvidia.com/Download/index.aspx)选择RTX 3090对应驱动[^2] - 安装后通过`nvidia-smi`命令验证驱动版本和GPU状态 --- #### 二、WSL2与Ubuntu配置 1. **安装WSL2** - PowerShell运行: ```powershell wsl --install -d Ubuntu-22.04 ``` - 设置WSL2为默认版本: ```powershell wsl --set-default-version 2 ``` 2. **Ubuntu系统配置** - 启动Ubuntu终端,更新软件源: ```bash sudo apt update && sudo apt upgrade -y ``` - 安装编译工具链: ```bash sudo apt install build-essential ``` --- #### 三、Docker与GPU支持集成 1. **安装Docker Desktop** - 下载[Docker Desktop for Windows](https://www.docker.com/products/docker-desktop/)并安装 - 设置中勾选`Use WSL 2 based engine`和`Integration with Ubuntu-22.04` 2. **配置NVIDIA Container Toolkit** - Ubuntu终端内执行: ```bash curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt update && sudo apt install -y nvidia-container-toolkit sudo systemctl restart docker ``` - 验证GPU支持: ```bash docker run --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi ``` --- #### 四、深度学习框架部署 1. **使用预构建Docker镜像** - 拉取PyTorch镜像(含CUDA 11.8): ```bash docker pull pytorch/pytorch:2.0.1-cuda11.8-cudnn8-devel ``` - 启动交互式容器: ```bash docker run -it --gpus all -v ~/workspace:/workspace pytorch/pytorch:2.0.1-cuda11.8-cudnn8-devel ``` 2. **可选:Anaconda本地环境** - 在WSL中安装Miniconda: ```bash wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh ``` - 创建PyTorch环境: ```bash conda create -n pytorch_env python=3.9 conda activate pytorch_env conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia ``` --- #### 五、验证环境 1. **PyTorch GPU测试** ```python import torch print(torch.cuda.is_available()) # 应输出True print(torch.rand(5,3).cuda()) # 应显示GPU张量 ``` 2. **TensorFlow GPU测试** ```python import tensorflow as tf print(tf.config.list_physical_devices('GPU')) # 应显示GPU信息 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值