数据窗口实现鼠标拖选框

MFC实战:单选框与复选框控件的交互设计与实现 本文详细介绍了在Visual Studio 2019中使用MFC实现单选框与复选框控件交互的实战指南。内容涵盖从项目创建、控件分组、变量绑定到手动编写消息映射与事件处理的全过程,并分享了分组失败、UpdateData误用等常见避坑经验,帮助开发者掌握MFC经典UI控件的核心交互设计。 阅读详情

最后的效果如下:

效果

 

效果如上图, 眼神好的已经看出来了, 边框其实就是4个长方形, 其实中间的条纹也是个长方形.

 

首先在数据窗口里放5个长方形对象.

 

 

功能的实现由三个事件组成, rbuttondown事件, 自定义的ue_mousemove, 自定义的ue_rb_up

 

在界面上数据窗口对象的rbuttondown事件下写代码   (下为部分代码)

//*****************框********************

if dwo.type="column" then
 b_lb_up=false
 b_rec_up=true
 dw_1.modify("r_5.visible=false")
 l_frop=long(dw_1.Object.Datawindow.FirstRowOnPage)

 if keydown(KeyShift!) then
//  if b_shift=true then
   l_last_row=row
   l_last_dwoid=long(dwo.id)
//   b_shift=false
   //---------------- draw -----
   long l_width,l_thisid
   int i

 l_width=long(dw_1.describe("#"+string(l_start_dwoid)+".width"))
 l_thisid=l_start_dwoid
 
 if long(dw_1.describe("#"+string(l_last_dwoid)+".x")) > &
  long(dw_1.describe("#"+string(l_start_dwoid)+".x")) then
  
  for i=1 to 40
   l_thisid=uf_findnextcol(l_thisid)
   l_width=l_width+9+ &
   long(dw_1.describe("#"+string(l_thisid)+".width"))
  if l_thisid=l_last_dwoid then
   exit
  end if
  next
  dw_1.modify("r_1.x="+dw_1.describe("#"+string(l_start_dwoid)+".x"))
  dw_1.modify("r_2.x="+dw_1.describe("#"+string(l_start_dwoid)+".x"))
  dw_1.modify("r_3.x="+string(long(dw_1.describe("#"+string(l_start_dwoid)+".x")) - 20))
  dw_1.modify("r_4.x="+string(long(dw_1.describe("#"+string(l_start_dwoid)+".x"))+l_width))
 else
  if long(dw_1.describe("#"+string(l_last_dwoid)+".x")) < &
  long(dw_1.describe("#"+string(l_start_dwoid)+".x")) then
  
  for i =1 to 40
    l_thisid=uf_findprecol(l_thisid)
    l_width=l_width+9+ &
    long(dw_1.describe("#"+string(l_thisid)+".width"))
  if l_thisid=l_last_dwoid then
   exit
  end if
  next
   dw_1.modify("r_1.x="+dw_1.describe("#"+string(l_last_dwoid)+".x"))
   dw_1.modify("r_2.x="+dw_1.describe("#"+string(l_last_dwoid)+".x"))
   dw_1.modify("r_3.x="+string(long(dw_1.describe("#"+string(l_last_dwoid)+".x")) - 20))
   dw_1.modify("r_4.x="+string(long(dw_1.describe("#"+string(l_last_dwoid)+".x"))+l_width)) 
  else
   l_width=long(dw_1.describe("#"+string(l_start_dwoid)+".width"))
   dw_1.modify("r_1.x="+dw_1.describe("#"+string(l_start_dwoid)+".x"))
   dw_1.modify("r_2.x="+dw_1.describe("#"+string(l_start_dwoid)+".x"))
   dw_1.modify("r_3.x="+string(long(dw_1.describe("#"+string(l_start_dwoid)+".x")) - 20))
   dw_1.modify("r_4.x="+string(long(dw_1.describe("#"+string(l_start_dwoid)+".x"))+l_width))
  end if
 end if
 
 if l_last_row>=l_start_row then
  dw_1.modify("r_1.y="+string(l_header_h - 10+(l_start_row - l_frop)*l_detail_h))
  dw_1.modify("r_2.y="+string(l_header_h+8+(l_last_row - l_frop + 1)*l_detail_h))
  dw_1.modify("r_3.y="+string(l_header_h+8+(l_start_row - l_frop )*l_detail_h))
  dw_1.modify("r_4.y="+string(l_header_h+8+(l_start_row - l_frop)*l_detail_h))
 else
  dw_1.modify("r_1.y="+string(l_header_h+8+(l_start_row - l_frop + 1)*l_detail_h))
  dw_1.modify("r_2.y="+string(l_header_h - 10+(l_last_row - l_frop)*l_detail_h))
  dw_1.modify("r_3.y="+string(l_header_h+8+(l_last_row - l_frop)*l_detail_h))
  dw_1.modify("r_4.y="+string(l_header_h+8+(l_last_row - l_frop)*l_detail_h))
 end if
 
 dw_1.modify("r_1.width="+string(l_width))
 dw_1.modify("r_2.width="+string(l_width))
 
 dw_1.modify("r_3.height="+string((abs(l_last_row - l_start_row) + 1)*l_detail_h))
 dw_1.modify("r_4.height="+string((abs(l_last_row - l_start_row) + 1)*l_detail_h))
 //-------------draw r5-----------
 dw_1.modify("r_5.x="+dw_1.describe("r_1.x"))

if long(dw_1.describe("r_1.y"))<=long(dw_1.describe("r_2.y")) then
 dw_1.modify("r_5.y="+string(long(dw_1.describe("r_1.y"))+16))
else
 dw_1.modify("r_5.y="+string(long(dw_1.describe("r_2.y"))+16))
end if
dw_1.modify("r_5.width="+dw_1.describe("r_1.width"))
dw_1.modify("r_5.height="+dw_1.describe("r_3.height"))
dw_1.modify("r_5.visible=true")
 //--------------draw end---------
 
//  else
//   b_shift=true
//   l_start_row=row
//   l_start_dwoid=long(dwo.id)
//  end if

 else
  l_start_row=row
  l_last_row=row
  l_start_dwoid=long(dwo.id)
  l_last_dwoid=long(dwo.id)
 
    
  dw_1.modify("r_1.x="+string(long(dwo.x)))
  dw_1.modify("r_1.y="+string(l_header_h - 10 +(row - l_frop)*l_detail_h))
  dw_1.modify("r_1.height=10")
  dw_1.modify("r_1.width="+string(long(dwo.width)))
  
  dw_1.modify("r_2.x="+string(long(dwo.x)))
  dw_1.modify("r_2.y="+string(10+l_header_h+(row - l_frop + 1)*l_detail_h))
  dw_1.modify("r_2.height=10")
  dw_1.modify("r_2.width="+string(long(dwo.width)))
  
  dw_1.modify("r_3.x="+string(long(dwo.x) - 20))
  dw_1.modify("r_3.y="+string(l_header_h+8+(row - l_frop)*l_detail_h))
   dw_1.modify("r_3.height="+string(10+long(dwo.height)))
   dw_1.modify("r_3.width=12")
  
  dw_1.modify("r_4.x="+string(10+long(dwo.x)+long(dwo.width)))
  dw_1.modify("r_4.y="+string(l_header_h+8+(row - l_frop)*l_detail_h))
   dw_1.modify("r_4.height="+string(16+long(dwo.height)))
  dw_1.modify("r_4.width=12")
  
  dw_1.modify("r_1.visible=true")
  dw_1.modify("r_2.visible=true")
  dw_1.modify("r_3.visible=true")
  dw_1.modify("r_4.visible=true")

end if
end if

 

解释一下, 里面有2个自定义的函数uf_findprecol() 和uf_findprecol() 顾名思义,就是找到鼠标点到的这一列的前一列和后一列的列id,

因为我这个窗口里的列是要允许用户随意拖动次序的(并且可以保存位置,下次打开还在这个位置).

显示方框的原理就是根据鼠标点的位置判断点在哪一列哪一行,然后可以确定方框的起点的具体位置xpos和ypos

 

自定义的ue_mousemove事件代码

if b_lb_up=false then
//************* mouse move*************
long xxx
if pixelstounits(xpos,XPixelsToUnits! )<long(dw_1.x) + 200 then
 xxx=long(dw_1.Object.DataWindow.HorizontalScrollPosition)
 xxx=xxx - 500
 dw_1.Object.DataWindow.HorizontalScrollPosition=xxx
end if
if pixelstounits(xpos,XPixelsToUnits! )>long(dw_1.width) - 200 then
 xxx=long(dw_1.Object.DataWindow.HorizontalScrollPosition)
 xxx=xxx+500
 dw_1.Object.DataWindow.HorizontalScrollPosition=xxx
end if
if pixelstounits(ypos,YPixelsToUnits! )<long(dw_1.y) + 200 then
 dw_1.setrow(row)
 dw_1.scrollpriorrow()
 //dw_1.scrollpriorpage()
end if
if pixelstounits(ypos,YPixelsToUnits! )>long(dw_1.height) - 300 then
 dw_1.setrow(row)
 dw_1.ScrollNextRow()
 //dw_1.ScrollNextpage()
end if

 

//*************************************

if dwo.type="column" then
long l_width,l_thisid
int i


 l_last_row=row
 l_last_dwoid=long(dwo.id)
 
 
 l_width=long(dw_1.describe("#"+string(l_start_dwoid)+".width"))
 l_thisid=l_start_dwoid
 
 if long(dw_1.describe("#"+string(l_last_dwoid)+".x")) > &
  long(dw_1.describe("#"+string(l_start_dwoid)+".x")) then
  
  for i=1 to 40
   l_thisid=uf_findnextcol(l_thisid)
   l_width=l_width+9+ &
   long(dw_1.describe("#"+string(l_thisid)+".width"))
  if l_thisid=l_last_dwoid then
   exit
  end if
  next
  dw_1.modify("r_1.x="+dw_1.describe("#"+string(l_start_dwoid)+".x"))
  dw_1.modify("r_2.x="+dw_1.describe("#"+string(l_start_dwoid)+".x"))
  dw_1.modify("r_3.x="+string(long(dw_1.describe("#"+string(l_start_dwoid)+".x")) - 20))
  dw_1.modify("r_4.x="+string(long(dw_1.describe("#"+string(l_start_dwoid)+".x"))+l_width))
 else
  if long(dw_1.describe("#"+string(l_last_dwoid)+".x")) < &
  long(dw_1.describe("#"+string(l_start_dwoid)+".x")) then
  
  for i =1 to 40
    l_thisid=uf_findprecol(l_thisid)
    l_width=l_width+9+ &
    long(dw_1.describe("#"+string(l_thisid)+".width"))
  if l_thisid=l_last_dwoid then
   exit
  end if
  next
   dw_1.modify("r_1.x="+dw_1.describe("#"+string(l_last_dwoid)+".x"))
   dw_1.modify("r_2.x="+dw_1.describe("#"+string(l_last_dwoid)+".x"))
   dw_1.modify("r_3.x="+string(long(dw_1.describe("#"+string(l_last_dwoid)+".x")) - 20))
   dw_1.modify("r_4.x="+string(long(dw_1.describe("#"+string(l_last_dwoid)+".x"))+l_width)) 
  else
   l_width=long(dw_1.describe("#"+string(l_start_dwoid)+".width"))
   dw_1.modify("r_1.x="+dw_1.describe("#"+string(l_start_dwoid)+".x"))
   dw_1.modify("r_2.x="+dw_1.describe("#"+string(l_start_dwoid)+".x"))
   dw_1.modify("r_3.x="+string(long(dw_1.describe("#"+string(l_start_dwoid)+".x")) - 20))
   dw_1.modify("r_4.x="+string(long(dw_1.describe("#"+string(l_start_dwoid)+".x"))+l_width))
  end if
 end if
 
 if l_last_row>=l_start_row then
  dw_1.modify("r_1.y="+string(l_header_h - 10+(l_start_row - l_frop)*l_detail_h))
  dw_1.modify("r_2.y="+string(l_header_h+8+(l_last_row - l_frop + 1)*l_detail_h))
  dw_1.modify("r_3.y="+string(l_header_h+8+(l_start_row - l_frop )*l_detail_h))
  dw_1.modify("r_4.y="+string(l_header_h+8+(l_start_row - l_frop)*l_detail_h))
 else
  dw_1.modify("r_1.y="+string(l_header_h+8+(l_start_row - l_frop + 1)*l_detail_h))
  dw_1.modify("r_2.y="+string(l_header_h - 10+(l_last_row - l_frop)*l_detail_h))
  dw_1.modify("r_3.y="+string(l_header_h+8+(l_last_row - l_frop)*l_detail_h))
  dw_1.modify("r_4.y="+string(l_header_h+8+(l_last_row - l_frop)*l_detail_h))
 end if
 
 dw_1.modify("r_1.width="+string(l_width))
 dw_1.modify("r_2.width="+string(l_width))
 
 dw_1.modify("r_3.height="+string((abs(l_last_row - l_start_row) + 1)*l_detail_h))
 dw_1.modify("r_4.height="+string((abs(l_last_row - l_start_row) + 1)*l_detail_h))
 
end if
end if

 

判断鼠标移动到的行和列, 把方块的大小调整过去. 关键是鼠标上下拖动的比较大,出现翻页的处理. 还有左右拖动出现窗口水平滚动的问题.

不要以为数据窗口里的对象不会画到控件外面去哦, 呵呵, 这也算是个bug吧

 

自定义的ue_rb_up事件代码

b_lb_up=true
if b_rec_up=true then
dw_1.modify("r_5.x="+dw_1.describe("r_1.x"))

if long(dw_1.describe("r_1.y"))<=long(dw_1.describe("r_2.y")) then
 dw_1.modify("r_5.y="+string(long(dw_1.describe("r_1.y"))+16))
else
 dw_1.modify("r_5.y="+string(long(dw_1.describe("r_2.y"))+16))
end if
dw_1.modify("r_5.width="+dw_1.describe("r_1.width"))
dw_1.modify("r_5.height="+dw_1.describe("r_3.height"))
dw_1.modify("r_5.visible=true")
end if
//messagebox("!",string(l_start_dwoid)+">>"+string(l_start_row)+">>"+string(l_last_dwoid)+">>"+string(l_last_row))

 

这个就很简单了,处理一下鼠标弹起的标志和方块对象的状态.

 

下次讲复制和粘贴excel表里的数据

MFC中单选框与复选框控件的实战应用指南 本文详细介绍了在Visual Studio 2019环境下,使用MFC框架进行单选框与复选框控件开发的实战指南。内容涵盖从创建对话框项目、拖放控件、设置关键属性(特别是单选框分组)、关联成员变量,到编写事件处理函数实现数据交互的全过程。文中还分享了实现“全选/反选”等进阶功能的技巧,并总结了常见的避坑点与最佳实践,帮助开发者高效掌握MFC基础控件的应用。 阅读详情

相关推荐

用鼠标选择pb数据窗口中的多行并进行处理

用鼠标选择pb数据窗口中的多行并进行处理

PB dw的下拉dddw的光标定位

光标移到最后,怎么获取光标位置的字段的值

happymagic的专栏 653

数据窗口对某行拖动的源代码例子

数据窗口对某行拖动的源代码例子,采用pb10开发并测试通过

Windows鼠标框选效果

常见情况下,一个JTable是放到一个JScrollPane,这样数据量很大的时候,可以通过滚动条来控制。因此要实现框选效果,需要考虑到这两个主要组件的paint问题。 框选操作,可以分解为 鼠标左键点击,拖拽,释放三个动作,因此需要实现MouseInputListener。考虑到此框选操作为特定look&feel拥有,故以BasicTableUI为基类实现 [code="java"]...

I like fly 450

西门子S7-1200 PLC与伺服电机控制实战解析

工业自动化控制系统中,PLC(可编程逻辑控制器)与伺服电机的协同工作是实现精密运动控制的核心技术。通过PROFINET工业以太网协议,PLC可以高效地控制多台伺服电机,实现定位、同步和插补等复杂运动。在实际工程应用中,硬件组态的正确配置和运动控制算法的优化是关键挑战。本文以西门子S7-1200 PLC控制五台伺服电机的项目为例,详细介绍了从硬件组态、运动控制程序实现到HMI界面设计的全流程。特别针对多轴同步插补运动、动态速度曲线调整等特殊工艺需求,提供了实用的解决方案和调试技巧,为工业自动化领域的工程师提供

weixin_30252709的博客 497

银河飞腾FT6678实战指南:OpenMP多核并行编程优化技巧

本文详细介绍了在银河飞腾FT6678多核处理器上使用OpenMP进行并行编程的实战技巧与优化方法。从基础语法到环境配置,再到性能优化的五大核心技巧,包括循环并行化、并行粒度控制、reduction子句使用等,帮助开发者充分发挥FT6678的8核计算能力。通过实际案例展示如何将图像处理算法从200ms优化到28ms,并深入探讨了任务调度、内存访问优化等进阶主题。

weixin_29234423的博客 285

前端——框选技术的实现

var selList = []; window.onload = function() { //定义鼠标框选的区域 var canvas = document.getElementById('teminal-area'); var selDiv; var isSelect = false; var evt; //鼠标点击时候的坐标 var startX; va...

前方一片光明 8193

Windows Server 搭建ftp服务

Windows Server 搭建ftp服务

ch258563的博客 1010

HTML表单标签<form></form>登录窗口和单选框以及下拉栏的制作

登录窗口的制作: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> .

hey,欢迎浏览我的博客,希望能给你提供帮助。 3835

CCC数字钥匙Release 3实战:如何用BLE/UWB实现无钥匙进入(附避坑指南)

本文深入解析CCC数字钥匙Release 3标准下BLE/UWB无钥匙进入系统的开发实践,涵盖硬件选型、安全测距协议、时序同步等关键环节,并提供实战调试技巧与安全攻防案例。特别针对BLE芯片配置、UWB模块选型等常见陷阱给出解决方案,帮助开发者高效实现厘米级精度的数字钥匙系统。

weixin_29326909的博客 254

别再硬啃理论了!手把手教你用Simulink搭VSG并网模型,模拟线路故障(含三相故障模块详解)

本文提供了一份详细的Simulink VSG并网模型搭建指南,特别聚焦于三相故障模块的配置与仿真。通过逐步指导,帮助电力电子工程师掌握从基础电路搭建到复杂故障模拟的全流程,包括单相接地、两相短路等典型故障的波形分析与参数设置技巧,有效弥合理论与实践的鸿沟。

weixin_29057237的博客 317

Ubuntu系统VScode实现opencv(c++)鼠标操作与响应

绘制矩形需要,起始点坐标,结束坐标,长宽,这些就需要程序来获得,我们上述的回调函数中,会获取当前鼠标事件发生时的坐标xy,那起始点以及结束点坐标就有了,对于长宽,也只需要结束点x-起始点x;用于显示所框选的区域;现在,我们还缺少鼠标移动事件的情况,编写之后,再接着纠错,实际上很简单,鼠标移动时,矩形跟着放大或者变小,实际上也是鼠标移动,绘制矩形;运行发现,整体大致没什么问题,但是我们在拉动的时候,希望这个矩形能跟着鼠标移动:并且画面也没有更新,绘制的框在绘制下一个依旧显示在上面;左上角的点为(0,0);

2402_84165995的博客 1523

移植 lwip,在 windows 内核构建一个 TCPIP 协议栈

移植 lwip,在 windows 内核构建一个 TCPIP 协议栈 亲,当你点开看这篇文章,就说明你知道我想要干什么事情,或者说,你知道在 Windows 的内核种绕开它的网络协议,再独立构建一个网络协议栈的意义。如果你要问我有 windows 系统的网络协议栈不用,移植 lwip 有什么意义,那么你可以关闭链接走人了,因为这篇文章不适合你,它不是讲 lwip 移植原理的。 经常关注我的博客的朋...

oRbIt 的专栏 3576

5 分钟上手 X-Mouse Controls:让 Windows 窗口焦点跟着鼠标走

X-Mouse Controls 是一款开源的 Windows 窗口管理小工具,核心功能是"焦点跟随鼠标"(x-mouse behavior)——光标悬停在哪个窗口上,哪个窗口就自动成为当前活动窗口,不用再补上那一下点击。对常常同时开着十来个窗口的程序员、分析师和设计师来说,这个微小的改变能省掉大量重复操作。下面用 6 个高频问题,带你从零把它用起来。 [![X-Mouse Controls 主

gitblog_00963的博客 210

Linux云服务器上搭建《僵尸毁灭工程》私服全流程指南(避坑版)

本文详细介绍了在Linux云服务器上搭建《僵尸毁灭工程》私服的全流程指南,包括环境准备、SteamCMD安装、游戏服务器部署、内存优化配置及高级调优技巧。特别针对常见问题提供解决方案,帮助玩家快速搭建稳定的私服环境。

solidity8miner的博客 600

026、传感器校准:加速度计校准

本文详细介绍了无人机飞控系统中加速度计的校准方法。作者从一次炸机事故引入,强调加速度计校准的重要性。文章首先解释了加速度计测量原理和误差来源,包括零偏、尺度因子和交叉轴耦合。重点介绍了两种校准方法:六位置法利用重力作为参考,操作简单但精度有限;椭球拟合通过采集大量数据点进行最小二乘拟合,精度更高但实现复杂。文章还指出温度补偿这一常被忽视的关键因素,并分享了实际调试中的经验教训,包括采样时长、安装误差、验证方法等。最后建议初学者从六位置法入手,逐步优化校准精度,强调良好的校准是飞控性能的基础。

2401_88858637的博客 45

AutoRaise:如何用鼠标悬停功能彻底改变macOS窗口管理体验

在macOS的多任务工作环境中,频繁的窗口切换常常打断工作流,消耗宝贵的时间和注意力。传统操作需要手动点击窗口才能获得焦点,这种机械式操作不仅降低了效率,更破坏了思维连续性。AutoRaise作为一款开源智能窗口管理工具,通过创新的鼠标悬停自动提升机制,为macOS用户带来了革命性的操作体验。 ## 重新定义窗口交互:从点击到悬停的进化 AutoRaise的核心理念是将窗口管理从主动操作转变为

gitblog_00707的博客 1059

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

鼠标按键自定义完全指南:让你的鼠标聪明听话

你是否曾因为鼠标操作不符合习惯而抓狂?是否希望鼠标能像智能助手一样理解你的需求?本文将带你探索如何通过鼠标按键自定义功能,让普通鼠标变成效率神器。我们将用通俗易懂的方式,解决日常使用中的各种痛点,让你的电脑操作体验焕然一新。 ## 1. 为什么需要鼠标按键自定义? 想象一下,你正在紧张地工作,需要频繁在不同窗口间切换。传统方式下,你必须移动鼠标到窗口标题栏点击,或者使用键盘快捷键。但如果你的鼠...

gitblog_00379的博客 1958

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

PB中如何用鼠标单击选中数据窗口中的一行?

在数据窗口的 click事件中: //鼠标单击选中一行 dw_1.SelectRow(0,False) dw_1.SelectRow(row,True) 转载于:https://www.cnblogs.com/quietwalk/archive/2011/01/16/1936598.html...

weixin_30725467的博客 390

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

pb数据窗口技巧38个

1 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下:将每一列的 Protect 属性设置为:If( IsRowNew(), 0, 1) )在 PowerScript 中可以动态修改 Protect 属性:dw_1.Modify("column_nam

yishanhai的专栏 3758

X-Mouse Controls 完整指南:用 3 个参数实现焦点跟随鼠标,去掉多窗口切换的多余点击

在编辑器、浏览器和终端之间来回切窗时,每次切换都得先点一下窗口才生效。X-Mouse Controls 把焦点跟随鼠标带到 Windows:光标滑过即激活,省掉中间那下点击。 ## 五分钟装好 X-Mouse Controls:让焦点跟随鼠标跑起来 三条路径任选,都能让窗口焦点跟踪生效。 **方式一:Chocolatey 一键安装** ```bash choco install xmous

gitblog_00976的博客 148

窗口边框拖不动?WindowResizer 强制调整任意窗口大小,新手3分钟搞定

你打开一套老系统,窗口卡在 800×600,在 27 寸屏幕上只占一小块,边框拖三下纹丝不动,设置里也翻不到调大小的选项。**WindowResizer** 是一款强制调整任意窗口大小的免费工具,从拿到手到见效,全程 3 分钟。 ## 它到底是个什么东西 WindowResizer 是一个面向 Windows 的窗口尺寸调整小工具,属性一句话列完: - **免费开源**,代码公开可查 - *

gitblog_00628的博客 184

python控制windows窗口、并输入数据_python win32api win32gui win32con 窗口句柄 发送消息 常用方法 键盘输入...

import win32guiimport win32conimport win32api# 从顶层窗口向下搜索主窗口,无法搜索子窗口# FindWindow(lpClassName=None, lpWindowName=None) 窗口类名 窗口标题名handle = win32gui.FindWindow("Notepad", None)# 获取窗口位置left, top, right, b...

weixin_39644021的博客 3385

3 步跑通 Headscale 容器部署:docker run、建用户、注册首台节点

Headscale 是自托管的 Tailscale 控制服务器,容器化部署的全部核心就是一条 `docker run` 加上几条 CLI 子命令。过去几个版本命令层级调整过几次(注册、路由都被挪进了 `nodes`/`auth` 下),照着旧博客敲命令很容易踩空。下面按实际部署动作走:把服务拉起来、发一个 preauthkey、注册第一台节点,每步后面附这步最容易报的错和对应的版本注意。 ##

gitblog_00787的博客 86

pb 数据窗口设置操作

1 使DataWindow列只能追加不能修改 2 在数据窗口中实现动画

chenllxx的专栏 5794
上一篇: 准备开始博客了
下一篇: 数据窗口实现与excel双向复制和粘贴
squally
博客等级 码龄20年 2粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值