27 四月, 2007

WB, MFC: 如何改变Web Browser Control的UI

改动IE的Web Browser控件UI,包括自定义或者禁止右键菜单,禁止控件border的3D特性,如何处理鼠标双击事件等等。

通过实现IDocHostUIHandler接口实现。

在IDocHostUIHandler设置前的文档窗口属性(可以被GetHostInfo改变的那部分)不会变化。所以,如果是在DWebBrowserEvents2::DocumentComplete事件内通过ICustomDoc接口设置IDocHostUIHandler的,那么当前窗口的Border和Scroll等属性的设置需要等待下一次Navigation完毕才能生效。有效期一直维持到控件释放或者下一次显式设置。

trick: 在控件显示前,Navigate "about:blank"页面,同时设置IDocHostUIHandler

至于通过重载PreTranslateMessage的方法实现禁止右键菜单的方法(参考:IE的WebBrowser control是一个窗口类,disable right mouse click -context menu-, accelerator keys),限制太多,特别是当此控件被Hosting两次后,连PreTranslateMessage方法也会被屏蔽。

参考:WebBrowser Customization

一个简单的例子:Disabling TCppWebBrowser's context menu or "right-click" menu. - by Borland Developer Support Staff


26 四月, 2007

Firefox吃内存,IE的webbrowser控件bug


23 四月, 2007

DIP: 反转片效果

做自动的反转片效果比较难,因为使用固定的参数只能适合少数照片。我使用的方法是:

  1. 自动色阶调整,提高原图质量
  2. Unsharp mask做轻度锐化(.5,.5,2)
  3. 适当调整亮度(-3)和对比度(+10)
  4. 大幅提高色彩饱和度(+30)

效果示意,原图:

Original,贵州都匀摆忙乡石板寨

应用反转效果后:

反转片效果


23 四月, 2007

DIP: 负片冲印(反转负冲)效果

参考pchome上的负片冲印效果PS方法,依次在VC++6.0内实现。

步骤:

  1. 红色通道“颜色加深”,绿色通道“反相,正片叠底,不透明度30%”,蓝色通道“反相,正片叠底,不透明度50%”
  2. 分别对三个通道进行色阶调整
  3. 合并通道,调整亮度和对比度
  4. 调整色彩明亮度和饱和度

效果示例,原图:

Original,贵州都匀摆忙乡石板寨

应用反转负冲效果后:

负片冲印效果

参考:

反转负冲效果(进修版本)

Photoshop图层混合模式计算公式大全

HSL and RGB conversion


20 四月, 2007

VC6: 半透明窗口

win2000以后,有新方法SetLayeredWindowAttributes,可以实现此目的。使用SetLayeredWindowAttributes,会影响到整个窗口,包括标题栏以及窗口内的所有控件。这是真正意义上的“半透明窗口”。

如果只是想实现“半透明窗口背景”效果的对话框,可以在首次绘制窗口之前保存被窗口覆盖的那部分的屏幕位图(从显示设备环境CDC对象COPY),然后采用AlphaBlend方法生成半透明效果,再绘制到窗口上。

AlphaBlend API需要msimg32.dll,这个动态库不支持win95/NT。如果想要支持95/NT,可以自己写一个AlphaBlend,毕竟,半透明位图的AC_SRC_OVER 算法相当简单。


20 四月, 2007

ActiveX: 如何获取IE浏览器的客户区屏幕坐标

  1. 首先要获取顶层浏览器窗口的接口,参考:"Retrieve the Top-Level IWebBrowser2 Interface from an ActiveX Control"
  2. 注意,IWebBrowser2的ClientToWindow方法,传入参数并非某点坐标,而是客户区的Size。返回的结果是在给定客户区Size的前提下,整个Browser的大小,包含标题栏,工具条,菜单,状态栏等,也包含整个客户区四周的Margin。所以无法通过这个方法取得客户端的left-top坐标
  3. 取得IHTMLDocument2接口:IWebBrowser2::get_document
  4. IHTMLWindow2接口:IHTMLDocument2::get_parentWindow
  5. 取得IHTMLWindow3接口:IHTMLWindow2::QueryInterface(IID_IHTMLWindow3)。注:window对象的所有方法,是通过IHTMLWindow2IHTMLWindow3IHTMLWindow4IHTMLWindow5这4个接口共同实现的。
  6. 通过IHTMLWindow3接口,取得window.screenLeft和window.screenTop的值。这两个值就是浏览器客户区left-top点相对于屏幕的坐标
  7. 通过IHTMLDocument2::get_body,获取document.body对象的offsetLeft, offsetTop, offsetWidth, offsetHeight值
  8. 现在,我们终于可以得到浏览器客户区的屏幕坐标了


17 四月, 2007

中国八成政府投入的医疗费是为各级党政干部服务

中国八成政府投入的医疗费是为各级党政干部服务

几个数据:

以药养医,医患矛盾,这些都是表面现象,医改的失败,政府要负主要责任。医疗卫生体制和运行机制不变,医疗改革只是空话。

医疗卫生绿皮书:医改不成功政府应负更多责任

1986年,各级政府财政卫生拨款122.23亿元,占当年卫生总费用315亿元的38.69%;2003年,中国卫生总费用6584.10亿元,按照1986年的比例,政府财政拨款应该是2547.38亿元,实际上却是1116.94亿元,卫生部门为政府节省了1430.44亿元。“卫生部门的钱从何处来?就是‘不能给钱给政策’,从病人那里收来的。人均卫生费用110元,占当年人均卫生费用509.50元的21.61%。看病哪能不贵?

  杜乐勋这样描述“不能给钱给政策”的执行过程:财政部门说,卫生部门不就是缺200亿元吗?我给你政策,你多收200亿元不就够用了吗?卫生部门不服,我要得到200亿元的纯收入,就必须多收1000亿元。正是有关部门“给政策”,卫生部门多收了1430亿元。结果是,既增加了医药产业的销售额,增加了医疗器械产业的销售额,财政部门200亿元又不用给了,皆大欢喜。

好一个皆大欢喜。


6 四月, 2007

Q5近照

Q5在游泳,旁边的漂亮姐姐是骨头同学的女儿

Q5 摆忙乡 江肘镇

都匀摆忙乡旧堡寨的千年古杏

Q5 摆忙乡 江肘镇

戴着海豚牌儿童太阳镜在家里骚包

Q5 摆忙乡 江肘镇


6 四月, 2007

谨以此图献给jiyu&abo

实在忍不住啊。。。

贵州省黔南苗族布依族自治州三都水族自治县“烂土”乡

烂人和土人