博文

GDI+计算文本行距等(2010-09-06 16:06:00)

摘要: FontFamily fontFamily(szFaceName/*(WCHAR*)strFaceName.GetBuffer()*/);  Font font(&fontFamily, (REAL)m_txLogFont.lfHeight, FontStyleRegular, UnitPixel);  // 文本  UINT ascent;  REAL ascentPixel;  UINT descent;  REAL descentPixel;  UINT lineSpacing;  REAL lineSpacingPixel;  // 获取 字体上部距离  ascent = fontFamily.GetCellAscent(FontStyleRegular);  // 转换为像素单位  ascentPixel = font.GetSize()*ascent/fontFamily.GetEmHeight(FontStyleRegular);  // 获取字体下部距离  descent = fontFamily.GetCellDescent(FontStyleRegular);  // 转换为像素单位  descentPixel = font.GetSize()*descent/fontFamily.GetEmHeight(FontStyleRegular);  // 获取字体行距  lineSpacing = fontFamily.GetLineSpacing(FontStyleRegular);  // 转换为像素单位  lineSpacingPixel = font.GetSize()*lineSpacing/fontFamily.GetEmHeight(FontStyleRegular);  // 计算输出文本间行距  REAL rSpaceLine = lineSpacingPixel - ascentPixel - descentPixel;......

阅读全文(6315) | 评论:0

中科院云技术视频讲座(2010-08-31 10:55:00)

摘要:http://v.youku.com/v_show/id_XMjAxNzYzNTYw.html......

阅读全文(3519) | 评论:0

VC GDI双缓冲机制防图形绘制闪烁(2010-08-30 16:10:00)

摘要:     在OnDraw(CDC* pDC) 中添加如下代码      CDC MemDC; //首先定义一个显示设备对象   CBitmap MemBitmap;//定义一个位图对象   //随后建立与屏幕显示兼容的内存显示设备   MemDC.CreateCompatibleDC(NULL);   //这时还不能绘图,因为没有地方画 ^_^   //下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小,也可以自己定义(如:有滚动条时就要大于当前窗口的大小,在BitBlt时决定拷贝内存的哪部分到屏幕上)   MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);   //将位图选入到内存显示设备中   //只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上   CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);   //先用背景色将位图清除干净,这里我用的是白色作为背景   //你也可以用自己应该用的颜色   MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));   //绘图   MemDC.MoveTo(……);   MemDC.LineTo(……);   //将内存中的图拷贝到屏幕上进行显示   pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);   //绘图完成后的清理   MemBitmap.DeleteObject();   MemDC.DeleteDC();......

阅读全文(5679) | 评论:0

技术群里网友关于虚析构函数的讲解(2010-08-26 19:18:00)

摘要:class A class B:public A 如果A* pObj = new B(); delete pObj; 那么如果A::~A是虚的话,则会调用B::~B,然后A::~A 如果A::~A不是虚的话,则只会调用A::~A,不会调用B::~B 在多态实际应用中,使用基类的指针来传递对象远远比直接的使用子类的时候多......

阅读全文(3795) | 评论:0

[Z]提问的艺术(2010-08-19 23:30:00)

摘要:转的这个帖子可能会被一部分人骂,但还是希望各位能看看,最后祝各位问题都能圆满解决。 在当今世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度, 同样取决于你提问的方法 不想掩饰对这样一些人的蔑视--他们不愿思考,或者在发问前不去完成他们应该做的事。这种人只会谋杀时间--他们只愿索取,从不付出,无端消耗我们的时间,而我们本可以把时间用在更有趣的问题或者更值得回答的人身上 提问之前 在提出技术问题前,检查你有没有做到: 1. 通读手册,试着自己找答案 2. 在FAQ里找答案 3. 在网上搜索(个人推荐google) 4. 向你身边精于此道的朋友打听 当你提出问题的时候,首先要说明在此之前你干了些什么;这将有助于树立你的形象:你不是一个妄图不劳而获的乞讨者,不愿浪费别人的时间。如果提问者能从答案中学到东西,我们更乐于回答他的问题。 怎样提问 用辞贴切,语法正确,拼写无误 我们从经验中发现,粗心的写作者通常也是马虎的思考者 回答粗心大意者的问题很不值得,我们宁愿把时间耗在别处。更一般的说,如果你的提问写得象个半文盲,你很有可能被忽视。 使用含义丰富,描述准确的标题 大约50字以内的主题标题是抓住资深专家注意力的黄金时机。 1. 谨慎明确的描述症状。 2. 提供问题发生的环境。 3. 说明你在提问前是怎样去研究和理解这个问题的。 4. 说明你在提问前采取了什么步骤去解决它。 5. 罗列最近做过什么可能有影响的硬件、软件变更。 话不在多 你需要提供精确有效的信息。这并不是要求你简单的把成吨的出错代码或者数据完全转储摘录到你的提问中。如果你有庞大而复杂的测试条件,尽量把它剪裁得越小越好。 明白你想问什么 漫无边际的提问近乎无休无止的时间黑洞。最能给你有用答案的人也正是最忙的人。如果你明确表述需要回答者做什么,就最有可能得到有用的答案。这会定出一个时间和精力的上限,便于回答者集中精力来帮你。 别问应该自己解决的问题 这些问题得由你来搞定,你会从中学到东西。你可以要求给点提示,但别要求得到完整的解决方案。 去除无意义的疑问 别用无意义的话结束提问,例如“有人能帮我吗?”或者“有答案吗?”。 首先:如果你对问题的描述不很合适。其次:由于这样问是画蛇添足,别人会很厌烦你,而且通常会用逻辑上正确的回答来表示他......

阅读全文(3676) | 评论:0

VC通过HBITMAP获取RGB值(2010-08-17 19:56:00)

摘要:        CRect rect(0,0,iLen,iLen);         HBITMAP hBitmap = CopyScrToBitmap(rect); //该方法见 VC截取桌面到 bitmap                         //http://blog.pfan.cn/lym51/51672.html         if (hBitmap!= NULL)         {             CBitmap* bitmap = CBitmap::FromHandle(hBitmap);             BITMAP bmp;             bitmap->GetBitmap(&bmp);             int bitmapSize=bmp.bmWidthBytes*bmp.bmWidthBytes;             BYTE* px = (BYTE*)GlobalAlloc(GPTR, bitmapSize);             if (p......

阅读全文(7668) | 评论:0

VC截取桌面到bitmap(2010-08-17 19:53:00)

摘要:// lpRect 为截取的区域 // by lymking@hotmail.com HBITMAP CopyScrToBitmap(LPRECT lpRect) {     HDC hScrDC=0, hMemDC;     HBITMAP hBitmap, hOldBitmap;     //int nX,nY,xX2,nY2;     // bitmap width&height     int nWidth, nHeight;     // screen resolution     int xScrn, yScrn;     // makesure the rectangle not NULL     if (IsRectEmpty(lpRect))     {         return NULL;     }     // create desktop screen dc     hScrDC = GetDesktopWindow()->GetDC()->m_hDC;/*CreateDC(_T("DISPLAY"), NULL, NULL, NULL);*/     int iOK =1;     if (hScrDC == NULL)     {         iOK = 0;     }     // create mem dc     hMemDC = Creat......

阅读全文(3545) | 评论:0

枚举系统安装的所有协议(2010-07-31 00:29:00)

摘要:// EnumProtocol.cpp : 定义控制台应用程序的入口点。 // // Get Procotol installed in os // code @ VS2005 // by lym #include "stdafx.h" #include <iostream> #include <Winsock2.h> using namespace std; #pragma comment(lib, "Ws2_32") int _tmain(int argc, _TCHAR* argv[]) {      WSADATA            wsd;      DWORD              dwSize=0;      WSAPROTOCOL_INFO* lpWsaprotocolInfo=NULL;      int                ret, i;         // Load Winsock      //      if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)      {           printf("WSASt......

阅读全文(2068) | 评论:0

UDP发送广播数据实例(2010-07-28 20:31:00)

摘要:因为某些需求,我们需要在网络中发送UDP广播,下面给出windows下UDP发送广播数据代码. UDP广播地址为255.255.255.255   关键字: setsockopt,  SO_BROADCAST, UDP广播地址   通过setsockopt这个API设置一个socket为广播socket   ////////////////////////////////////////////////////////////////////////////////////////      setsockopt说明:      设置套接口的选项。   #include <winsock.h>   int PASCAL FAR setsockopt( SOCKET s, int level, int optname,   const char FAR* optval, int optlen);   s:标识一个套接口的描述字。   level:选项定义的层次;目前仅支持SOL_SOCKET和IPPROTO_TCP层次。   optname:需设置的选项。   optval:指针,指向存放选项值的缓冲区。   optlen:optval缓冲区的长度。 /////////////////////////////////////////////////////////////////////////////////////////   ///代码示例   SOCKET sock; BOOL bBroadcast = TRUE; char  szBroadcast[] = "this is broadcast data!"; SOCKADDR_IN sockAddr;   // create udp socket sock = WSASocket(AF_INET,  SOCK_DGRAM/*UDP*/,  0, NULL, 0, WSA_FLAG_OVERLAPPED); // s......

阅读全文(7605) | 评论:0

go语言编程在windows下开发环境配置(图文)(2010-07-27 14:27:00)

摘要:go语言编程在windows下开发环境配置(图文) 原文链接... http://student.csdn.net/space.php?uid=237699&do=blog&id=36202 1.在Go中文论坛下载最新的Go for windows release 2010-05-04 2.将下载包解压在c盘下。 3.设置环境变量。 Code: set goroot=c:\go       set goarch=386      set path=c:\go\bin    set goos=windows       4.编写第一个go语言程序代码。 Code: package main    import "fmt"   func main(){           fmt.Printf("this is first my\n go program")    };   用记事本编写并保存为h.go,我保存在了c:\go\work下 5.编译并运行h.go文件 运行cmd,转到c:\go\work下分别输入 Code: 8g h.go    8l h.8    8.out   可以看到h.go编译并成功运行。也可以看到当前目录下有三个文件 6.go语言尚有待提高,在windows下中文会乱码,官方推荐notepad++编程,尚未试过,最终乱码问题我也尚未解决。go目录下也 有很多test例子。 ......

阅读全文(8526) | 评论:11