C/C++
jokers_i
这个作者很懒,什么都没留下…
展开
-
Chromium界面分析小结(四)工具栏结构
工具栏左侧是常用的命令按钮,中间是最重要的地址栏,右侧是插件按钮和工具菜单按钮。整个工具栏由一个GtkHBox容器包裹,四个部分中只有地址栏是具有扩展属性,可以跟随窗口大小改变。原创 2013-04-17 18:35:32 · 1577 阅读 · 0 评论 -
Chromium界面分析小结(二)主界面结构
因为GTK+库中提供了丰富的界面布局控件,使得控件位置控制非常方便,所以Chromium几乎全部使用了GTK+的原生布局控件,主要包括:GtkAlignment、GtkVBox、GtkHBox和GtkFixed。 整个主界面的内容从上到下依次是菜单栏、标题栏、工具栏、书签栏和最重要的网页内容区域。在Ubuntu中所有程序的菜单栏都位于屏幕最上方,而在其他的桌面环境下菜原创 2013-04-17 18:32:58 · 2417 阅读 · 0 评论 -
Chromium界面分析小结(一)界面构造调用层次
在chromium中真正承担浏览器窗口创建的类是BrowserWindowGtk,它的Init成员函数完成了界面创建的大部分任务。在Init函数中,创建主窗口后,添加控件的任务都在InitWidgets函数中完成,主要动作有:创建程序菜单栏、创建标题/标签栏、创建工具/地址栏、创建书签栏。原创 2013-04-17 18:31:01 · 2184 阅读 · 0 评论 -
Chrome GTK菜单构建过程
Chrome在GTK版的界面中使用了自定义的菜单,毕竟基本菜单功能太简单,至少没有ButtonMenuItem这种一个菜单项上多个按钮的功能。Chrome的自定义菜单控件是GtkCustomMenuItem,然后由MenuGtk类进行封装。MenuGtk类在构造函数中接收一个***MenuModel的对象,这些对象大都继承自ui::SimpleMenuModel类,对象对菜单项进行原创 2013-03-28 10:14:09 · 1357 阅读 · 0 评论 -
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 · 1251 阅读 · 0 评论 -
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 · 1609 阅读 · 2 评论 -
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 · 1272 阅读 · 0 评论 -
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 · 1429 阅读 · 0 评论 -
Chromium主界面框架(Gtk+)
这是Chromium窗口经过函数BrowserWindowGtk::InitWidgets()初始化后的效果,该函数位于:/src/chrome/browser/ui/gtk/browser_window_gtk.cc。至于各个控件的具体功能还有待进一步分析。原创 2013-03-19 14:02:44 · 2427 阅读 · 0 评论 -
Chromium界面分析小结(五)地址栏结构
地址栏位于工具栏中间,它是个很复杂的物件,虽然样子看上去很简单,但是功能的确很强大,所以结构就复杂了。在地址栏最左侧是显示页面信息的图标,如果是经过https加密传输的页面,图标显示为绿色锁形,并在右侧显示网站单位信息,如果不是加密页面则显示空白文档图标。点击这个图标后会弹出该页面对应的权限(HTML5新增功能)和详细安全信息(加密算法和认证证书)。紧挨着右边是一个tab_to_search的原创 2013-04-17 18:37:33 · 2181 阅读 · 0 评论 -
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 · 7715 阅读 · 1 评论 -
Chromium界面分析小结(八)字符串资源管理方法
Chromium具有多语言自动切换功能,程序启动时会根据系统的语言设置来选择界面语言。英文的字符串和ID号的对应关系在文件src/chrome/app/generated_resources.grd和chromium_strings.grd,该文件也是xml描述的,在文件中还记录了所有其他语言翻译过的字符串资源文件位置:也记录了字符串资源文件输出路径:,编译时grit工具会根据原创 2013-04-17 18:41:47 · 2199 阅读 · 0 评论 -
队列应用一例
#include #define max 50int queue[max],front=0,rear=0;void enque(){ if((rear+1)%max==front) printf("队已经排满了=_+!/t请等待……"); else { int his,ck=0; printf("请输入病人的病历号:(6位纯数字)"); while (ck==0) { s原创 2011-03-22 14:54:00 · 645 阅读 · 2 评论 -
创建Chrome WebUI接口(Chrome内部页面)
什么是WebUIWebUI就是Chrome的chrome://about/中列出来的页面。它根本上是一个html页面,但是他的数据可以从浏览器内部的C++代码获取,它可以使用js向浏览器发送消息,还可以接收浏览器发送的消息。为什么要用WebUI因为html+js与平台无关,这些页面本来需要使用平台特定的UI库来实现,而其本身又没有太多的功能要实现,只是一些简单的数据显示和存储,使用html页面就很方便,而且js在WebUI的支持下也能满足所有需求。原创 2013-07-12 10:30:10 · 9190 阅读 · 0 评论 -
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 · 2009 阅读 · 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 · 2224 阅读 · 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 · 5020 阅读 · 2 评论 -
Chromium界面分析小结(六)工具菜单结构
Chromium的菜单实现考虑到跨平台的要求,使用了一层抽象模型(SimpleMenuModel),所有菜单模型都继承自这个类,各平台实现时需要根据提供的模型构造对应的菜单。这个工具菜单模型是WrenchMenuModel类,也继承自SimpleMenuModel。Chromium在Linux平台使用了GTK+来创建界面,也就由MenuGtk类负责菜单模型的解释和构造。所有的菜单都要经过**Men原创 2013-04-17 18:39:56 · 4585 阅读 · 0 评论 -
Chromium界面分析小结(三)标题栏结构
标题栏主要包括所有的标签,最小化、最大化和关闭按钮,因为Ubuntu可以由用户选择这些按钮的位置,所以Chromium添加了两个放置这些按钮的容器以方便改变位置。放置头像的容器也有左右两个,因为隐身模式和普通模式的头像位置不同原创 2013-04-17 18:34:12 · 2235 阅读 · 0 评论 -
Chromium界面分析小结(十)界面构造主要类和函数
1. BrowserWindowGtk这是BrowserWindow的一个GTK+实现版本,它创建了整个CR窗口,在类中有许多访问控件的接口LocationBar*GetLocationBar()、TabStripGtk* tabstrip()、BrowserTitlebar* titlebar()、BrowserToolbarGtk*GetToolbar(),通过返回的指针可以原创 2013-04-17 18:43:37 · 1387 阅读 · 0 评论 -
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 · 1493 阅读 · 0 评论 -
代码行数统计工具
最近无聊,写了个代码行数统计的小工具,采用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 · 1438 阅读 · 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 · 2175 阅读 · 1 评论 -
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 · 2781 阅读 · 2 评论 -
采用链表存储的银行系统
//银行.h 1: #include 2: #include 3: #include 4: #include 5: #include 6: #define FailureBeep() _beep(2000,300) 7: #define SucceedBeep() _beep(600,500) 8: #define NameLength 20 //用户名最多20个英文字母或10个汉字 9: #define DEPOSIT 1原创 2011-04-16 14:29:00 · 1160 阅读 · 0 评论 -
字符格式数字?
<br />#include "stdio.h"#include <string.h>#include"stdlib.h"#include <conio.h> char str[12],z[10][10][6]; int num[12],i,j,k,u,n,m,conter;void makeit(){ system("mode con: cp select=437"); system("cls"); system("title 少杰のLED @Jokers");原创 2011-03-22 16:34:00 · 460 阅读 · 0 评论 -
生成基于linux的乐教电视播放列表
<br />#include <Windows.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#define MaxLenth 5000int FileNum=0;int CheckFormat(char *name,const char *format){ int Len=strlen(name); int Blen=strlen(format); int i;// char* format[原创 2011-03-22 16:33:00 · 508 阅读 · 0 评论 -
自动编译java文件
#include #include #include char path[400],file[100];int CheckFormat(char *name,const char *format) //符合格式返回1,不符合返回0{ int Len=strlen(name); int Blen=strlen(format); int i;// char* format[4]={".mp3",".MP3"}; if(Len>Blen) //只有文件名长度原创 2011-03-22 16:29:00 · 640 阅读 · 0 评论 -
简单的银行
<br />#include <stdio.h>#include "银行.h"int main(){ InitEnvironmen(); while(1) { switch(printHead()) { case 49: NewUser();break; case 50: Deposit();break; case 51: Draw();break; case 52: Query();break; case 53: CheckHist原创 2011-03-22 16:25:00 · 553 阅读 · 0 评论 -
模拟简单秒表
<br />//秒表.h<br /> <br />#pragma oncenamespace 模拟秒表 { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespa原创 2011-03-22 15:09:00 · 798 阅读 · 4 评论 -
表达式求解
<br />#include"stdio.h"<br />void trans(char *exp,char postexp[])<br />{<br /> struct <br /> { char data[200];<br /> int top;<br /> }op;<br /> int i=0;<br /> op.top=-1;<br /> while (*exp!='/0')<br /> {<br /> switch(*exp)<br /> {<br /> case '(':<br />原创 2011-03-22 15:03:00 · 573 阅读 · 0 评论 -
迷宫的解
<br />#include <stdio.h><br />#include "time.h"<br />#define MaxSize 100<br />#define M 8<br />#define N 8<br />void prints(int s[10][10])<br />{<br /> int i,j;<br /> for(i=0;i<10;i++)<br /> { for(j=0;j<10;j++)<br /> {if(s[i][j]==1)printf("█");<br /> e原创 2011-03-22 15:00:00 · 595 阅读 · 0 评论 -
小数转换为分数形式
#include #include #define MaxDecimalLength 40typedef struct decimals{ int d; int f;}decimals;int FindGDC(int a,int b){ int i = a<b?a:b; for(;i>1;i--) { if(a%i==0&&b%i==0)原创 2011-06-21 15:01:00 · 1686 阅读 · 0 评论 -
最简单的TCP客户端(winapi)
#include #pragma comment(lib, "ws2_32.lib")#include void main(){ WSADATA wsaData; WSAStartup(MAKEWORD( 2, 2) , &wsaData ); SOCKET s原创 2011-08-17 11:43:07 · 1035 阅读 · 0 评论 -
VC在局域网中通过http协议获取公网IP地址
最后还是用http协议请求解决了,使用wireshark截取了这个请求的内容,然后通过套接字发送给服务器,于是得到想要的ip地址:#pragma comment(lib, "ws2_32.lib")#include#includeusing namespace std;原创 2011-08-24 16:54:02 · 3403 阅读 · 1 评论 -
不限制位数的大数乘法
#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 · 906 阅读 · 0 评论 -
两个数不同的位个数
《编程之美》里的一道思考题:给定两个正整数(二进制形式表示)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 · 864 阅读 · 0 评论 -
MFC设计局域网对战五子棋游戏(一)设计
一直想做游戏,不过鉴于D3D和OPENGL有点复杂,所以就选择了比较简单的GDI+和GDI混合模式,这样就解决了GDI绘图质量不高和GDI+不支持双缓冲的问题。开发环境采用Visual Studio 2010旗舰版,因为不需要做什么项目,因为我还是学生呵呵,所以不需要考虑太多的兼容性方面的因素,还是喜欢用新的工具。开发过程中使用到的技术大概有:DWM API:这是vista以来新增的A原创 2012-04-08 22:43:15 · 7507 阅读 · 5 评论 -
MFC设计局域网对战五子棋游戏(六)网络通信
网络通信部分放在了独立的线程中处理,因为使用的是CSocket,而且它是采用阻塞式的,所以需要自己使用多线程技术来接受数据,而不能再主线程中阻塞接收过程。这是建立和搜索游戏的流程图: 建立游戏就是“摆擂”按钮:void CWZQDlg::OnBnClickedServer(){ if(m_receving) return; m_uid = 1; AfxBeginTh原创 2012-04-13 13:26:47 · 4991 阅读 · 1 评论 -
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 · 3637 阅读 · 0 评论