2012年5月3日

关于WM_NCHITTEST消息

摘要: 我为了移动一个无标题栏的窗体,使用了WM_NCHITTEST消息,这个消息大概如下: 通常,我们拖动对话框窗口的标题栏来移动窗口,但有时候,我们想通过鼠标在客户区上拖动来移动窗口。 一个容易想到的方案是,处理鼠标消息WM_LBUTTONDOWN和WM_LBUTTONUP。在OnLButtonUp函数中计算鼠标位置的变化,调用MoveWindow实现窗口的移动。 注意,拖动标题栏移动窗口的时候,会出现一个矩形框,它提示了窗口移动的当前位置。当鼠标左键放开的时候,窗口就移动到矩形框所在位置。而我们的实现方案中没有这个功能。 要实现此功能,我们必须自己来画这些矩形。 事实上,我们没有必要自... 阅读全文

posted @ 2012-05-03 16:32 刺客mrchenzh 阅读(217) 评论(0) 推荐(0) 编辑

WPF 基础系列2—WPF前世今生

摘要: 1.开篇前言 很多时分了解一项新技术的汗青和趋势经常比这项技术的自身价值还要首要。WPF作为一项新技术(曾经三年多了,或者应该叫老技术了),大家都有需要了解它 的前因后果,特殊是公司的CTO、技术总监、架构师等决策层,因为他们对技术的选型及应器具有抉择权。关于开辟者来说,了解自己正在从事的这个技术的前世 此生,有助于大家更好的熟悉技术自身的价值,也能够避免大家少走一些弯路(圣殿骑士 就走过很多弯路,所以对此比较慨叹)。从IT技术展开的这些年能够看出,技术关于各大公司只是竞争的一种伎俩,而关于大多半轨范员来说技术就是特饭碗以至 于生命,所以人人站的立场分歧,也会构成各自分歧的观念。放眼如... 阅读全文

posted @ 2012-05-03 11:35 刺客mrchenzh 阅读(890) 评论(1) 推荐(0) 编辑

Control.Invoke与消息队列

摘要: MSDN上关于Control.Invoke的描述是:在拥有此控件的基础窗口句柄的线程上执行指定的委托。 先不考虑主是怎么找到那个拥有控件的基础窗口句柄的线程的,看看后半句,“在某个线程上执行指定的委托”,这个比较有意思。让一个正在运行的线程去执行另 一个指定的任务,这似乎不大可能。因为,任何程序都是顺序执行的,除了程序中的跳转指令外,没有任何东西可以让程序直接跑到另一个毫不相干的地址去执行。 在我们确定了线程的入口后,就没有什么东西可以干预线程的执行过程了,除非把它Drop掉。 那么,这里是怎么回事呢?微软如何让一个线程从正在执行的任务中暂停,而让它去执行另一个任务,完后再转回去继续执行原.. 阅读全文

posted @ 2012-05-03 11:04 刺客mrchenzh 阅读(244) 评论(0) 推荐(0) 编辑

WinForm 之Control.Invoke 和Control.BeginInvoke 方法的使用

摘要: WinForm 之Control.Invoke 和Control.BeginInvoke 方法的使用 Control 不能在创建它的 Thread 之外被调用。但可以通过 invoke 来保证 Control 线程安全。 在跨线程更新的时候,Control 会检查 CurrentThread 是否为创建 Control 的线程,并报错! 示例代码如下: 示例代码 privatevoidbtnStart_Click(objectsender,EventArgse){//注意:特地不使用Timer控件Threadthread=newThread(Fun);thread.Start(DateT... 阅读全文

posted @ 2012-05-03 10:36 刺客mrchenzh 阅读(196) 评论(0) 推荐(0) 编辑

我理解的invoke和begininvoke 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解。 首先说下,invoke和begininvoke的使用有两种情况: 1. control中的invoke、begi

摘要: 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解。 首先说下,invoke和begininvoke的使用有两种情况: 1. control中的invoke、begininvoke。 2. delegrate中的invoke、begininvoke。 这两种情况是不同的,我们这里要讲的是第1种。下面我们在来说下.NET中对invoke和begininvoke的官方定义。 control.invoke(参数delegate)方法:在拥有此控件的基础窗口句柄的线程上执行指定的委托。 control.begininvok... 阅读全文

posted @ 2012-05-03 10:28 刺客mrchenzh 阅读(262) 评论(0) 推荐(0) 编辑

C#线程:BeginInvoke和EndInvoke方法

摘要: 开发语言:C#3.0 IDE:Visual Studio 2008 一、C#线程概述 在操作系统中一个进程至少要包含一个线程,然后,在某些时候需要在同一个进程中同时执行多项任务,或是为了提供程序的性能,将要执行的任务分解成多 个子任务执行。这就需要在同一个进程中开启多个线程。我们使用C#编写一个应用程序(控制台或桌面程序都可以),然后运行这个程序,并打开windows 任务管理器,这时我们就会看到这个应用程序中所含有的线程数,如下图所示。 如果任务管理器没有“线程数”列,可以【查看】>【选择列】来显示“线程计数”列。从上图可以看出,几乎所有的进程都拥有两个以上的线程。从而可以看出,线程是 阅读全文

posted @ 2012-05-03 09:50 刺客mrchenzh 阅读(203) 评论(0) 推荐(0) 编辑

导航