自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

上善若水的专栏

上善若水。水善利万物而不争,处众人之所恶, 故几于道。

  • 博客(61)
  • 资源 (9)
  • 收藏
  • 关注

原创 Android应用截图两种方法

在Android应用开发过程中,可能会遇到需要对整个界面或者某一部分进行截图的需求。Android中对View的截图也有很多中方式:使用DrawingCache直接调用View.drawDrawingCache方法:如果使用DrawingCache,则对要截图的View有一个要求:View本身已经显示在界面上。如果View没有添加到界面上或者没有显示(绘制)过,则buildDr

2014-09-25 13:59:04 21712 6

原创 Linux终端实现根据应用包名过滤Logcat

#!/bin/bashif [[ ! -n $1 ]]; then cat <<EOF Usage: `basename $0` EOF exit 1fipackage_name=$1pid_list=$(adb shell ps| grep $package_name)if [[ -n $pid_list ]]; then # find pid, grep logcat wi

2014-09-25 00:17:50 3970

原创 GDI+批量生成图片

使用GDI+批量生成png图片,每个图片上绘制一个日期字串。初始读取sample.png为模板:#include #include #include using namespace Gdiplus;#pragma comment(lib,"gdiplus.lib")int GetEncoderClsid(const WCHAR* format, CLSID* pCls

2013-09-16 17:51:47 1977 2

原创 PDH获取指定网卡速度

#include #include #include #include #include #pragma comment(lib, "pdh.lib") CONST ULONG SAMPLE_INTERVAL_MS = 1000; CONST PWSTR BROWSE_DIALOG_CAPTION = L"Select a counter to monito

2013-09-03 11:39:25 2170 4

原创 chromium tarball编译步骤

下载tarball在Chromium官网的Get the Code页面可以找到tarball下载链接http://chromium-browser-source.commondatastorage.googleapis.com/chromium_tarball.html解压缩使用tar -xzvf chromium.r####.tgz

2013-08-07 14:40:57 4987 2

原创 创建Chrome WebUI接口(Chrome内部页面)

什么是WebUIWebUI就是Chrome的chrome://about/中列出来的页面。它根本上是一个html页面,但是他的数据可以从浏览器内部的C++代码获取,它可以使用js向浏览器发送消息,还可以接收浏览器发送的消息。为什么要用WebUI因为html+js与平台无关,这些页面本来需要使用平台特定的UI库来实现,而其本身又没有太多的功能要实现,只是一些简单的数据显示和存储,使用html页面就很方便,而且js在WebUI的支持下也能满足所有需求。

2013-07-12 10:30:10 9128

原创 Chromium界面分析小结(十)界面构造主要类和函数

1.        BrowserWindowGtk这是BrowserWindow的一个GTK+实现版本,它创建了整个CR窗口,在类中有许多访问控件的接口LocationBar*GetLocationBar()、TabStripGtk* tabstrip()、BrowserTitlebar* titlebar()、BrowserToolbarGtk*GetToolbar(),通过返回的指针可以

2013-04-17 18:43:37 1359

原创 Chromium界面分析小结(九)命令执行过程

在chromium中所有命令都是由命令ID表示,ID列表保存在src/chrome/app/chrome_command_ids.h文件中,该文件内包含了所有Chromium可以理解的命令ID。当命令被激活时,Chromium会通过代理一层层传递,直到传递到位于chromium/src/chrome/browser/ui/browser_command_controller.cc中的Browser

2013-04-17 18:42:44 1479

原创 Chromium界面分析小结(八)字符串资源管理方法

Chromium具有多语言自动切换功能,程序启动时会根据系统的语言设置来选择界面语言。英文的字符串和ID号的对应关系在文件src/chrome/app/generated_resources.grd和chromium_strings.grd,该文件也是xml描述的,在文件中还记录了所有其他语言翻译过的字符串资源文件位置:也记录了字符串资源文件输出路径:,编译时grit工具会根据

2013-04-17 18:41:47 2142

原创 Chromium界面分析小结(七)图片资源管理方法

Chromium中所有的图片资源都是png格式的,在linux下这些图片由grit工具打包成pak格式并附有每个资源的ID,Chromium在运行时可以根据ID获取对应的图片。      在文件src/chrome/app/theme/theme_resources.grd中定义了所有的图片文件的ID号,编译时grit工具根据此grd文件生成头文件src/out/Debug/obj/gen

2013-04-17 18:40:54 7697 1

原创 Chromium界面分析小结(六)工具菜单结构

Chromium的菜单实现考虑到跨平台的要求,使用了一层抽象模型(SimpleMenuModel),所有菜单模型都继承自这个类,各平台实现时需要根据提供的模型构造对应的菜单。这个工具菜单模型是WrenchMenuModel类,也继承自SimpleMenuModel。Chromium在Linux平台使用了GTK+来创建界面,也就由MenuGtk类负责菜单模型的解释和构造。所有的菜单都要经过**Men

2013-04-17 18:39:56 4482

原创 Chromium界面分析小结(五)地址栏结构

地址栏位于工具栏中间,它是个很复杂的物件,虽然样子看上去很简单,但是功能的确很强大,所以结构就复杂了。在地址栏最左侧是显示页面信息的图标,如果是经过https加密传输的页面,图标显示为绿色锁形,并在右侧显示网站单位信息,如果不是加密页面则显示空白文档图标。点击这个图标后会弹出该页面对应的权限(HTML5新增功能)和详细安全信息(加密算法和认证证书)。紧挨着右边是一个tab_to_search的

2013-04-17 18:37:33 2144

原创 Chromium界面分析小结(四)工具栏结构

工具栏左侧是常用的命令按钮,中间是最重要的地址栏,右侧是插件按钮和工具菜单按钮。整个工具栏由一个GtkHBox容器包裹,四个部分中只有地址栏是具有扩展属性,可以跟随窗口大小改变。

2013-04-17 18:35:32 1540

原创 Chromium界面分析小结(三)标题栏结构

标题栏主要包括所有的标签,最小化、最大化和关闭按钮,因为Ubuntu可以由用户选择这些按钮的位置,所以Chromium添加了两个放置这些按钮的容器以方便改变位置。放置头像的容器也有左右两个,因为隐身模式和普通模式的头像位置不同

2013-04-17 18:34:12 2196

原创 Chromium界面分析小结(二)主界面结构

因为GTK+库中提供了丰富的界面布局控件,使得控件位置控制非常方便,所以Chromium几乎全部使用了GTK+的原生布局控件,主要包括:GtkAlignment、GtkVBox、GtkHBox和GtkFixed。              整个主界面的内容从上到下依次是菜单栏、标题栏、工具栏、书签栏和最重要的网页内容区域。在Ubuntu中所有程序的菜单栏都位于屏幕最上方,而在其他的桌面环境下菜

2013-04-17 18:32:58 2332

原创 Chromium界面分析小结(一)界面构造调用层次

在chromium中真正承担浏览器窗口创建的类是BrowserWindowGtk,它的Init成员函数完成了界面创建的大部分任务。在Init函数中,创建主窗口后,添加控件的任务都在InitWidgets函数中完成,主要动作有:创建程序菜单栏、创建标题/标签栏、创建工具/地址栏、创建书签栏。

2013-04-17 18:31:01 2139

原创 Chromium界面分析图册(GTK+)

http://sdrv.ms/12i2Vpbhttp://sdrv.ms/12i2Vpb图册地址

2013-04-16 13:54:54 1179

原创 Chromium资源文件.pak解包方法(python)

import collectionsimport structimport sysdef ReadFile(filename, encoding): mode = 'rb' if encoding == 0 else 'rU' with open(filename, mode) as f: data = f.read() if encoding not in (0, 1)

2013-04-15 09:41:42 20481 3

原创 Ubuntu给菜单截图

因为弹出菜单时PrintScreen键不能按,所以我们必须让它自动截图。>sleep 3;gnome-screenshot;睡眠3秒,然后截图。搞定!

2013-04-08 10:44:34 791

原创 Chromium地址栏界面框架分析(GTK+)

chrome地址栏是个很复杂的物件,虽然样子看上去很简单,但是功能的确强大的很,所以结构就复杂了。它的初始化函数位于:src/chrome/browser/ui/gtk/location_bar_view_gtk.cc:void LocationBarViewGtk::Init(),图中各个可见部分都对应了控件元素。但是还有:script_bubble_button_:Gt

2013-04-02 17:36:53 1384

原创 Chrome GTK菜单构建过程

Chrome在GTK版的界面中使用了自定义的菜单,毕竟基本菜单功能太简单,至少没有ButtonMenuItem这种一个菜单项上多个按钮的功能。Chrome的自定义菜单控件是GtkCustomMenuItem,然后由MenuGtk类进行封装。MenuGtk类在构造函数中接收一个***MenuModel的对象,这些对象大都继承自ui::SimpleMenuModel类,对象对菜单项进行

2013-03-28 10:14:09 1312

原创 ubuntu12.10下编译chrome时执行/src/build/install-build-deps.sh出错

这是因为脚本中限制了ubuntu的版本,把这一段注释掉就可以了。ubuntu_versions="10\.04|10\.10|11\.04|11\.10|12\.04"ubuntu_codenames="lucid|maverick|natty|oneiric|precise"if ! egrep -q "Ubuntu ($ubuntu_versions|$ubuntu_cod

2013-03-22 17:37:01 1592 2

原创 Chrome编译出错@不建议使用‘ppd_attr_t* ppdFindAttr声明于 /usr/include/cups/ppd.h:407

编译Chrome时出现如下错误:printing/backend/cups_helper.cc: 在函数‘bool {anonymous}::GetColorModelSettings(ppd_file_t*, int*, int*, bool*)’中:printing/backend/cups_helper.cc:285:22: 错误: 不建议使用‘ppd_attr_t* ppdFind

2013-03-22 17:32:04 1234

原创 Chromium工具栏框架对应图(GTK+)

Chomium工具栏应该是整个界面中最复杂的部分了,它几乎包含了所有的功能按钮和一个强大的地址栏。工具栏初始化操作在函数BrowserToolbarGtk::Init(GtkWindow* top_level_window)中实现,该函数在/src/chrome/browser/ui/gtk/browser_toolbar_gtk.cc文件中定义。工具栏中的actions_toolba

2013-03-20 17:00:23 1207

原创 Chromium主界面框架(Gtk+)

这是Chromium窗口经过函数BrowserWindowGtk::InitWidgets()初始化后的效果,该函数位于:/src/chrome/browser/ui/gtk/browser_window_gtk.cc。至于各个控件的具体功能还有待进一步分析。

2013-03-19 14:02:44 2372

原创 代码行数统计工具

最近无聊,写了个代码行数统计的小工具,采用MFC开发,核心计算代码如下:templateVOID CalcLines(CONST T* buffer,CONST T seprator,CONST DWORD nchars,CodeFileLineInfo& cfi){ DWORD visible = 0; for (DWORD i = 0;i<nchars;i++) { vi

2012-12-15 22:25:03 1414 5

原创 全排序输出

输出给定字符串的所有顺序:如"123",输出:123,132,213,231,312,321递归解法如下:#include #include using std::cout;using std::cin;using std::endl;using std::string;void PrintOrder(const string& pre,const string

2012-11-23 15:57:33 2133 1

原创 无限循环小数的分数形式

在《编程之美》里看到这个方法。对于混循环小数的情况,计算公式是:0.a1a2...an(b1b2...bm)=(a1a2...an+(b1b2...bm)/(10m-1))/(10n-1);如果是纯循环小数:0.(a1a2...an)=(a1a2...an)/(10n-1)推导过程很简单:设X=0.(a1a2...an)10n*X = a1a2...an+X

2012-11-14 08:58:09 1543

原创 N的阶乘二进制表示的最低位1的位置

《编程之美》中的一道题:#include #include using std::endl;using std::string;using std::cout;typedef unsigned long long ULLONG;//给定整数N,求N!的二进制表示中最低位1的位置templatestring ToBinary(T n){ if (n==0) { retu

2012-11-10 19:06:21 2751 2

原创 不限制位数的大数乘法

#include #include using std::cout;using std::cin;using std::string;using std::ostream;using std::istream;class BigNum{public: friend ostream& operator<<(ostream& os,const BigNum& n); friend

2012-11-10 14:55:41 884

原创 两个数不同的位个数

《编程之美》里的一道思考题:给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A  和B  的二进制表示中有多少位是不同的?#include inline int BitsOf(unsigned int n){ int cnt = 0; while(n) { n&=n-1; cnt++; } return cnt;

2012-11-09 11:13:53 830

原创 MFC设计局域网对战五子棋游戏(六)网络通信

网络通信部分放在了独立的线程中处理,因为使用的是CSocket,而且它是采用阻塞式的,所以需要自己使用多线程技术来接受数据,而不能再主线程中阻塞接收过程。这是建立和搜索游戏的流程图: 建立游戏就是“摆擂”按钮:void CWZQDlg::OnBnClickedServer(){ if(m_receving) return; m_uid = 1; AfxBeginTh

2012-04-13 13:26:47 4951 1

原创 MFC设计局域网对战五子棋游戏(五)游戏中的数据结构和算法

游戏中设计的结构体有: //棋盘中每个格子的信息typedef struct dot{ UINT used :1;//是否已经被占用 UINT uid :7;//占用者的id号 UINT lt :3;//左上角有几个相同id号的棋子 UINT t :3;//上方有几个相同id号的棋子 UINT rt :3;//以下根据方向不同表示意思类似 UINT l :3;//字段

2012-04-13 11:36:33 2971

原创 MFC设计局域网对战五子棋游戏(四)GDI+和GDI混合双缓冲绘图

在游戏中,绘制棋盘的工作交给了一个独立的线程来负责: UINT CWZQDlg::PaintThread(LPVOID param){ CWZQDlg* pwd = (CWZQDlg*)param; UINT sideLength = 554; REAL blockLength = sideLength/15.0F; POINT or = pwd->m_mouse; HPEN

2012-04-13 11:16:01 3625

原创 MFC设计局域网对战五子棋游戏(三)构造游戏主对话框

游戏对话框的构造函数: CWZQDlg::CWZQDlg(CWnd* pParent /*=NULL*/): CDialogEx(CWZQDlg::IDD, pParent),m_gameStart(false),m_clientLength(554.0f),//初始化游戏区域大小为554pxm_uid(0),//主机id号为0m_receving(false),//开始接收游戏

2012-04-13 10:51:10 2549

原创 MFC设计局域网对战五子棋游戏(二)实现GDI+自绘按钮

因为按钮位于对话框右侧的透明区域,如果使用GDI绘制的话不能达到效果,因为GDI不支持alpha通道,绘制到透明的对话框上只能是透明的效果,而GDI+支持alpha通道,所以使用GDI+绘制就可以了。首先看看自绘的按钮的类成员和重载函数:class MyButton : public CButton{ DECLARE_DYNAMIC(MyButton)public: MyBu

2012-04-13 10:19:31 3789 3

原创 MFC设计局域网对战五子棋游戏(一)设计

一直想做游戏,不过鉴于D3D和OPENGL有点复杂,所以就选择了比较简单的GDI+和GDI混合模式,这样就解决了GDI绘图质量不高和GDI+不支持双缓冲的问题。开发环境采用Visual Studio 2010旗舰版,因为不需要做什么项目,因为我还是学生呵呵,所以不需要考虑太多的兼容性方面的因素,还是喜欢用新的工具。开发过程中使用到的技术大概有:DWM API:这是vista以来新增的A

2012-04-08 22:43:15 7460 5

原创 判断多网卡是否连接到网络

这是MSDN提供的一个实例程序,主要演示函数GetAdaptersAddresses的用法。精简了一下,只查看得到结构体IP_ADAPTER_ADDRESSES中的一个成员OperStatus,就可以区分机器上安装的多个网卡的连接情况。先来看看结构体IP_ADAPTER_ADDRESSES:typedef struct _IP_ADAPTER_ADDRESSES { union

2011-11-21 20:32:33 6832 7

原创 奇偶校验码

设i为单位错误概率:无校验单字节错误概率计算公式:P=1-Math.pow(1-i,8);1位奇偶校验单字节错误概率计算公式:P=(1-i)*(28*Math.pow((1-i),6)*i*i+70*Math.pow(i,4)*Math.pow(1-i,4)+28

2011-09-22 23:34:49 1038

原创 VC在局域网中通过http协议获取公网IP地址

最后还是用http协议请求解决了,使用wireshark截取了这个请求的内容,然后通过套接字发送给服务器,于是得到想要的ip地址:#pragma comment(lib, "ws2_32.lib")#include#includeusing namespace std;

2011-08-24 16:54:02 3348 1

代码行数统计工具(修复版)

简单的代码行数统计工具,可以统计代码文件中的空行数和非空行数并输出为csv文件,采用MFC 开发

2012-12-28

代码行数统计工具

简单的代码行数统计工具,可以统计代码文件中的空行数和非空行数并输出为csv文件,采用MFC 开发

2012-12-15

MFC设计局域网对战五子棋游戏(源代码)

开发环境采用Visual Studio 2010旗舰版,因为不需要做什么项目,因为我还是学生呵呵,所以不需要考虑太多的兼容性方面的因素,还是喜欢用新的工具。 开发过程中使用到的技术大概有: DWM API:这是vista以来新增的API,具体内容见MSDN,游戏中只使用了部分窗口毛玻璃的效果; GDI混合GDI+:因为GDI+不支持双缓冲,所以画图时先使用GDI创建缓冲位图,然后使用GDI+的Graphics画在这个位图上,最后由GDI绘制到屏幕; CSocket:局域网对战肯定要用到socket通信,因为数据量很少,所以使用了封装好的比较简单的CSocket类,这样可以省不少代码; 多线程和互斥对象:因为CSokcet工作在阻塞模式,所以不能使用主线程接受和发送游戏数据,我把绘制图像的代码也放在一个独立线程中,所以需要使用互斥对象来确保主线程退出时所有子线程以释放主线程中的资源,否则会引起内存错误; 自绘控件:在游戏中使用默认的控件也太挫了吧,所以就要自己绘制控件,这样才像游戏,虽然市面上有很多,但是拿来的和自己写的用着感觉不一样;

2012-04-13

动态添加自会控件

我自己绘制了一个按钮控件,继承自CButton类,可以实现鼠标移上、获得焦点、按下和普通不同情况的不同形态。 用资源编辑器拖到对话框上然后添加MyButton类的变量可以实现以上各种功能。 但是如果用代码动态添加的话就不行了。

2011-12-24

显示器物理尺寸_鼠标跟踪器

在注册表中查显示器的EDID项值可以获取物理尺寸,但是不精确,大概在±0.5cm左右; 其中还有很多关于显示器的信息,如型号; 获取系统分辨率,计算出系统桌面像素和实际物理单位的换算关系,然后根据鼠标移动的像素数计算出其移动的物理距离; 后台记录用到了全局钩子WH_MOUSE_LL,捕捉左单击和右单击的次数,还有移动的像素数。

2011-10-23

mfc网络通信的socket实现

两个vs2010的工程,分别是服务器端和客户端,支持多人在线聊天,可以选择聊天对象。 采用socket和多线程的方式实现网络通信,可以设置广域网IP和端口,只要能用,就可以实现广域网通信。

2011-08-22

java实现经典小游戏合集

贪吃蛇 俄罗斯方块 扫雷 双缓冲绘图 java2d Graphics2D绘图 包含源代码、编译字节码、jar打包可直接运行(需要java虚拟机)

2011-08-17

c++的一个秒表示例

很简单的一个秒表,精度达到要求 #include <iostream> #include <time.h> #include <Windows.h> #include<stdio.h> #include<stdlib.h> 都用到了上述的几个库文件

2010-11-17

我写的一个模拟LED显示数字的C程序

在命令指示符中模拟显示LED的数字,是某年某学校的一道考研题。

2010-05-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除