MSDN如是说:
The LockWindowUpdate function disables or enables drawing in the specified window. Only one window can be locked at a time.

BOOL LockWindowUpdate(
  HWND hWndLock   // handle to window
);

Parameters
hWndLock 
[in] Specifies the window in which drawing will be disabled. If this parameter is NULL, drawing in the locked window is enabled. 
Return Values
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero, indicating that an error occurred or another window was already locked.

通俗的说,就是这个函数把参数---句柄--所关联的窗口锁住了,不再让他继续更新了。
GetDCEx
The GetDCEx function retrieves a handle to a display device context (DC) for the client area of a specified window or for the entire screen. You can use the returned handle in subsequent GDI functions to draw in the DC.

This function is an extension to the GetDC function, which gives an application more control over how and whether clipping occurs in the client area.

HDC GetDCEx(
  HWND hWnd,      // handle to window
  HRGN hrgnClip,  // handle to clipping region
  DWORD flags     // creation options
);
此函数参数怪多的,这里就不贴了,参考 MSDN吧

关键在于第三个参数:标志位的设置
前面我们已经知道了,LockWindowUpdate可以锁住某个窗口,如果我们锁住的话,那将不能在这个窗口中进行一切绘制操作(用GetDC,BeginPaint,CreateIC,CreateDC这些API创建的DC都被禁止),比如TextOut也将失效,因为第一个参数是hdc,如果是前面括号中的方式得到的DC,那就失去作用。
然而,GetDCEx却十分例外,如果我们把第三个参数设置成DCX_LOCKWINDOWUPDATE,那即使你把窗口锁住,用此API得到的DC,依然可以对此窗口进行绘制,十分特殊。
最后提醒一点:同一时刻,只能有一个窗口被锁住。
利用反证法比较容易证明此观点:
比如LockWindowUpdate(A);
LockWindowUpdate(B);
那我释放的时候只能用LockWindowUpdate(NULL);//看函数参数介绍,NULL表示释放
那请问此刻释放的是哪个窗口?你能说清楚吗?
因此肯定莫一时刻只能锁住一个窗口。
最后给出一个测试代码吧:

  1. #include<iostream>
  2. #include<windows.h>
  3. using namespace std;
  4. void main()
  5. {
  6. TCHAR szAppName[]=TEXT("I love you!!!");
  7. HWND hwnd=FindWindow(NULL,TEXT("伊锐锐"));
  8. //HDC hdc=GetDC(hwnd);
  9. HDC hdc=GetDCEx(hwnd,NULL,DCX_LOCKWINDOWUPDATE);
  10. LockWindowUpdate(hwnd);
  11. SetBkMode(hdc,TRANSPARENT);
  12. TextOut(hdc,0,50,szAppName,lstrlen(szAppName));
  13. ReleaseDC(hwnd,hdc);
  14. LockWindowUpdate(hwnd);
  15. }

代码通俗易懂,这里其实我用的就是往QQ聊天窗口中输入I LOVE YOU罢了,测试起来效果还行。

http://blog.csdn.net/yiruirui0507/article/details/6332118

对LockWindowUpdate与GetDCEx的理解(以前不知道还可以锁住刷新)的更多相关文章

  1. 第二十节: 深入理解并发机制以及解决方案(锁机制、EF自有机制、队列模式等)

    一. 理解并发机制 1. 什么是并发,并发与多线程有什么关系? ①. 先从广义上来说,或者从实际场景上来说. 高并发通常是海量用户同时访问(比如:12306买票.淘宝的双十一抢购),如果把一个用户看做 ...

  2. 【转】T-SQL查询进阶—理解SQL Server中的锁

      简介 在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于大多数数据库来说是需要同时处理多个查 ...

  3. 深入理解MYSQL的MDL元数据锁

    1 前言 2 MDL锁与实现 3 MDL锁的性能与并发改进 4 MDL锁的诊断 前言 好久没更新,主要是因为Inside君最近沉迷于一部动画片——<新葫芦娃兄弟>.终于抽得闲,完成了本篇关 ...

  4. 深入理解 iOS 开发中的锁

    来源:伯乐在线 - 夏天然后 链接:http://ios.jobbole.com/89474/ 点击 → 申请加入伯乐在线专栏作者 摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大 ...

  5. T-SQL查询进阶—理解SQL Server中的锁

    在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于大多数数据库来说是需要同时处理多个查询的.这些 ...

  6. C++11标准的智能指针、野指针、内存泄露的理解(日后还会补充,先浅谈自己的理解)

    1.野指针的概念.成因以及避免 首先,来说说什么是野指针,所谓野指针就是一个指向未申请访问受限的内存区域或者已经删除了的对象的指针. 什么意思呢?就是本来一个指针指向一个对象.一块内存,但是由于程序( ...

  7. 深入理解MySQL的并发控制、锁和事务【转】

    本文主要是针对MySQL/InnoDB的并发控制和加锁技术做一个比较深入的剖析,并且对其中涉及到的重要的概念,如多版本并发控制(MVCC),脏读(dirty read),幻读(phantom read ...

  8. iOS 多线程的简单理解(4) 线程锁的简单使用

    要用到多线程 ,就不得不考虑,线程之间的交互,线程是否安全 推荐一个原文链接 是关于 线程锁的基本使用的  http://blog.csdn.net/qq_30513483/article/detai ...

  9. 理解Oracle TM和TX锁

    在Oracle中有很多锁,通过v$lock_type视图可以查看Oracle中所有类型的锁,在本篇文章中我们熟悉一下TM和TX锁的类型 SQL> select * from v$lock_typ ...

随机推荐

  1. python字符串连接的三种方法及其效率、适用场景详解

    python字符串连接的方法,一般有以下三种:方法1:直接通过加号(+)操作符连接website=& 39;python& 39;+& 39;tab& 39;+& ...

  2. JavaBean基础

    JavaBean的概念 JavaBean是一种可重复使用.且跨平台的软件组件.JavaBean可分为两种:一种是有用户界面(UI,User Interface)的JavaBean:还有一种是没有用户界 ...

  3. C primer plus 读书笔记第十章

    这一章的标题是数组和指针.指针是C语言的精髓所在,而数组的概念和指针又息息相关,所以放在一起讲. 1.数组 主要内容有:1.1.数组初始化.1.2.指定初始化.1.3.数组赋值.1.4.数组边界.1. ...

  4. 再探java基础——对面向对象的理解(2)

    对象.类和抽象类的区别 对象是一个具体的事物,类是对具有相同属性和行为的一组对象的抽象,对象是类的一个一个人的具体实例:抽象类是一种特殊的类,是对类的进一步抽象,抽象类不能被实例化. 类.抽象类和接口 ...

  5. tomcat URL简写案例:模拟站点www.baidu.com的訪问

    tomcat URL简写案例:模拟站点  * 实际URL:http://www.baidu.com:8080/myweb/1.html  * 实际位置:F:\mywebapps\myweb\1.htm ...

  6. MYSQL 体系结构图

  7. .ignore插件自动忽略

    AS自带的.ignore文件 在AS中新建项目时,默认会创建一个.ignore文件,其中默认忽略的是 *.iml .gradle /local.properties /.idea/workspace. ...

  8. Retrofit2 简介 语法 案例

    简介 官网:http://square.github.io/retrofit/ GitHub:https://github.com/square/retrofit/ compile 'com.squa ...

  9. 【开源java游戏框架libgdx专题】-14-系统控件-Skin类

    Skin类主要用于存储用户界面的资源,该资源主要用于窗口部件.这些资源也包括纹理图片.位图画笔.颜色等内容.方便创建游戏组件,同时使用Skin也可以批量的粗略处理一些窗口部件. test.json { ...

  10. 本文实例汇总了C#中@的用法,对C#程序设计来说有不错的借鉴价值。

    具体如下: 一 字符串中的用法 1.学过C#的人都知道C# 中字符串常量可以以@ 开头声名,这样的优点是转义序列“不”被处理,按“原样”输出,即我们不需要对转义字符加上 \ (反斜扛),就可以轻松co ...