【VC经验】偶的小经验一

原创 2004年06月04日 11:08:00


说明:这些是我在编程中碰到和处理过的一些问题和经验。这是第一篇(看看效果,先)。

一,PostMessage和SendMessage

1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。而且,PostMessage的返回值表示PostMessage函数执行是否正确;而SendMessage的返回值表示其他程序处理消息后的返回值。这点大家应该都明白。

2, 如果在同一个线程内,PostMessage发送消息时,消息要先放入线程的消息队列,然后通过消息循环Dispatch到目标窗口。SendMessage发送消息时,系统直接调用目标窗口的消息处理程序,并将结果返回。SendMessage在同一线程中发送消息并不入线程消息队列。

如果在不同线程内。最好用PostThreadMessage代替PostMessage,他工作的很好。SendMessage发送消息到目标窗口所属的线程的消息队列,然后发送消息的线程等待(事实上,他应该还在做一些监测工作,比如监视QS_SENDMESSAGE标志),直到目标窗口处理完并且结果返回,发送消息的线程才继续运行。这是SendMessage的一般情况,事实上,处理过程要复杂的多。比如,当发送消息的线程监测到有别的窗口SendMessage一个消息到来时,他直接调用窗口处理过程(重入),并将处理结果返回(这个过程不需要消息循环中GetMessage等的支持)。

3, msdn: If you send a message in the range below WM_USER to the asynchronous message functions (PostMessage, SendNotifyMessage, and SendMessageCallback), its message parameters can not include pointers. Otherwise, the operation will fail.

如果发送的消息码在WM_USER之下(非自定义消息)且消息参数中带有指针,那么PostMessage,SendNotifyMessage,SendMessageCallback这些异步消息发送函数将会调用失败。

最好不要用PostMessage发送带有指针参数的消息。

二,设置视图(客户区)大小

在主窗口中(也可以改到视图中,用GetParentFrame获得主窗口指针):

CRect rect(100,100,400,400); //要设置的视图的位置和大小

//AdjustWindowRectEx通过视图大小计算出主窗口大小。
//函数执行时,rect传入的是新视图的位置和大小。
//第三个参数为FALSE表示不需要计算菜单的尺寸,否则加入菜单尺寸计算窗口大小。
//函数执行完之后,rect中返回的是新的窗口位置和大小。

::AdjustWindowRectEx(&rect, GetStyle(), FALSE, GetExStyle()); 

MoveWindow(&rect);   //移动窗口

注释:用这种方法用来动态改变视图大小。要注意的问题是,AdjustWindowRectEx第三个参数为TRUE的话,加入计算的菜单是一行的高度,如果有多行(可以通过客户区尺寸是不是高度没有达到要求),需要用:
int dh = GetSystemMetrics(SM_CYMENU);
得到菜单高度,然后添加到窗口高度中。

三,ADO数据库操作

1, 得到数据库中的表名,某个表的字段名。用 rs = m_pConnection ->OpenSchema (SchemaEnum QueryType,_variant_t param,_variant_t param2);可以得到。

比如
rs = m_curConnection.OpenSchema(adSchemaColumns,vtMissing,vtMissing);
得到的一个记录集。他的字段包括: TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME等很多信息。效果图如下(部分):

效果图


可以用这个rs来移动记录,获得表名(字段"TABLE_NAME"下),某个表的字段名(字段"COLUMN_NAME")。需要注意的是,得到表名的时候要判断得到的表名是否重复(和上次得到的表名比较一下就可以拉);在表明相同的时候,他的字段名("COLUMN_NAME"下)是不同的,这样可以得到某个表的所有字段名。

2, 用好recordset对象的Supports(CursorOptionEnum CursorOptions)方法。有时候用来判断数据库是否支持某类操作。比如:

//如果可读取并设置 AbsolutePosition 和 AbsolutePage 的属性
if(m_curRs.Supports(adApproxPosition)) {
 //...
}

关于CursorOptionEnum的取值,很多ado手册上都有。

 

enoloo,

6.4,2004

VC维 和经验风险,结构风险

2.2 VC维 2009-06-21 12:37 范明/昝红英/牛常勇译 机械工业出版社 我要评论(0) 字号:T | T 综合评级: 想读(2)  在读(0)  已读(6)  ...
  • pi9nc
  • pi9nc
  • 2013年06月11日 17:22
  • 5173

第一次小有成就心得

今天是来公司第8天,一直在干技术支持的事情,处理着客户订单中遇到的各种问题,貌似每个问题的解决方法都与自己所学专业知识没有太大的关系,唯一用到计算机相关知识的是每天刷新“工单环节不一致”,但脚本语言也...
  • u012491514
  • u012491514
  • 2015年06月17日 11:50
  • 353

关于序偶和二元关系的基本概念(摘自Wikipedia)

序偶(Ordered pair)的基本概念: In mathematics, an ordered pair (a, b) is a pair of mathematical objects. ...
  • hpu000
  • hpu000
  • 2015年09月23日 14:43
  • 212

奇模和偶模概念

传输线差分阻抗和共模阻抗概念比较容易理解,但是奇模偶模阻抗概念比较难理解。 奇模和偶模是相对于地来说的,以地作为参考面。而差分线是相对于2根线之间的关系来说的。下图是奇模和偶模的模型图: ...
  • ly0303521
  • ly0303521
  • 2014年10月04日 16:05
  • 1521

VC编程经验汇总(一)

1. 窗口最大化、最小化的实现 当我们不能用标题栏的最大化、最小化及恢复按钮而又需在其他的地方实现这些功能,可以在指定的消息处理函数里添加: WINDOWPLACEMENT wndpl; ...
  • xjbclz
  • xjbclz
  • 2016年07月05日 21:16
  • 110

偶然性不可重现BUG怎么处理?

一、一定要提交!!   1. 记得有这么个缺陷,以后再遇到的时候可能就会了解发生的原因。   2. 尽力去查找出错的原因,比如有什么特别的操作,或者一些操作环境等。   3. 程序员对程序比测试人员熟...
  • qiansanjia
  • qiansanjia
  • 2014年12月23日 10:07
  • 1212

傅里叶变换,据说看不懂可以掐死原作者,我就没太看懂

原文出处: 韩昊    1 2 3 4 5 6 7 8 9 10 作 者:韩 昊 知 乎:Hei...
  • u012687799
  • u012687799
  • 2016年09月22日 09:48
  • 240

那些Android小经验

原文出处:http://jayfeng.com/  做Android久了,就会踩很多坑,被坑的多了就有经验了,闲暇之余整理了部分,现挑选一些重要或者偏门的“小”经验做个记录。 查看SQLi...
  • a6136581
  • a6136581
  • 2016年04月21日 13:51
  • 238

请大家远离偶,偶不是“好人”!

你有没有觉得自从我们的世界被手机包围,视野似乎变得宽广,但心却更寂寞了早晨睁眼第一件事是摸摸手机在哪,睡前最后一件事是给手机充电,似乎离了手机就与世隔绝了和久别重逢的好友相聚,感觉没有在微信聊的那么畅...
  • Candy_iLync
  • Candy_iLync
  • 2016年11月21日 09:32
  • 136

【2017年360机试题】偶串

1题意 定义个字符串S是偶串当且仅当S中的每一种字符都出现了偶数次。例如S=‘‘abbacc′′就是一个偶串,因为abc三种字符都出现了偶数次。 题目为输入一个字符串,问S有多少个子串是偶串。 ...
  • Wonder233
  • Wonder233
  • 2017年03月30日 10:13
  • 400
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【VC经验】偶的小经验一
举报原因:
原因补充:

(最多只允许输入30个字)