array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 屏幕截图工具 - 爱码网
luangeng

之前用win32做的屏幕截图软件V1,非常方便好用。

在V2版本中增加了屏幕尺和颜色拾取功能,并且改用屏幕和内存DC双缓冲,彻底消灭了闪屏,可惜代码丢失了

这是V1的代码:

//create by luangeng 2011/11/11
//baseed on win32
#include <windows.h>
#pragma comment (lib,"User32.lib")

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
HDC hdc;
PAINTSTRUCT ps;
HPEN hPen,hOldpen;
HBRUSH hBrush,hOldbrush;  
RECT rt;
int ox,oy,nx,ny,sx,sy,bx,by,ax,ay;
bool down=0;

int Min(int x,int y)
{
    if(x>y) return y;
    else return x;
}
int Max(int x,int y)
{
    if(x>y) return x;
    else return y;
}

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
                    LPSTR lpszArgument, int nFunsterStil)
{
    HWND hwnd;               
    MSG messages;            
    WNDCLASSEX wincl; 

    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = "ScreenCapture by LG";
    wincl.lpfnWndProc = WindowProcedure;     
    wincl.style = CS_NOCLOSE;                
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = NULL;
    wincl.hIconSm = NULL;
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 
    wincl.cbClsExtra = 0;                  
    wincl.cbWndExtra = 0;           
    wincl.hbrBackground = (HBRUSH)COLOR_WINDOWTEXT; 

    if (!RegisterClassEx (&wincl))  return 0;

    hwnd = CreateWindowEx (WS_EX_TOPMOST | WS_EX_LAYERED | WS_EX_NOACTIVATE, "ScreenCapture by LG",
                "ScreenCapture",WS_POPUP | WS_MAXIMIZE,0,0,GetSystemMetrics(SM_CXSCREEN),
                GetSystemMetrics(SM_CYSCREEN),HWND_DESKTOP,NULL,hThisInstance,NULL);
                
    typedef BOOL (WINAPI *lpfn)(HWND hWnd,COLORREF cr,BYTE bAlpha,DWORD dwFlags);
    lpfn g_pSetLayeredWindowAttributes;
    HMODULE hUser32 = GetModuleHandle("USER32.DLL");
    g_pSetLayeredWindowAttributes = (lpfn)GetProcAddress(hUser32, "SetLayeredWindowAttributes");
  //  (*g_pSetLayeredWindowAttributes)(hwnd,RGB(255,255,255),200,0x01|0x02);
    for(int i=10;i<200;i+=10)
    {
                (*g_pSetLayeredWindowAttributes)(hwnd,RGB(255,255,255),i,0x01|0x02);
                                Sleep(10);
                                 ShowWindow (hwnd, nFunsterStil);
    }
    
   
    hdc=BeginPaint(hwnd,&ps);
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    
    return messages.wParam;
}

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{    
    switch (message)
    {
        case WM_LBUTTONDOWN:
             down=1;
             ox=LOWORD(lParam);
             oy=HIWORD(lParam);   
             hPen=CreatePen(PS_SOLID,1,RGB(0,250,154));
             hOldpen=(HPEN)SelectObject(hdc,hPen);
             hBrush=(HBRUSH)GetStockObject(BLACK_BRUSH);    
             hOldbrush=(HBRUSH)SelectObject(hdc,hBrush);
             GetClientRect(hwnd,&rt);
             break;
             
        case WM_MOUSEMOVE:
            if(down)
            {   
                Sleep(30);
                nx=LOWORD(lParam);
                ny=HIWORD(lParam);
                sx=Min(ox,nx);
                sy=Min(oy,ny);
                bx=Max(ox,nx);
                by=Max(oy,ny);
                ax=bx-sx;
                ay=by-sy;
                FillRect(hdc,&rt,hBrush);
                MoveToEx(hdc,sx,oy,NULL);
                LineTo(hdc,(ox + nx)/2-ax/6,oy);
                MoveToEx(hdc,(ox + nx)/2+ax/6,oy,NULL);
                LineTo(hdc, bx, oy);
                MoveToEx(hdc,sx, ny,NULL);
                LineTo(hdc,(ox + nx)/2-ax/6,ny);
                MoveToEx(hdc,(ox + nx)/2+ax/6,ny,NULL);
                LineTo(hdc,bx, ny);
                MoveToEx(hdc,ox, sy,NULL);
                LineTo(hdc,ox, (oy + ny) / 2 - ay / 6);
                MoveToEx(hdc,ox,(oy+ny)/2+ay/6,NULL);
                LineTo(hdc,ox, by);
                MoveToEx(hdc,nx,sy,NULL);
                LineTo(hdc,nx,(oy+ny)/2-ay/6);
                MoveToEx(hdc,nx,(oy+ny)/2+ay/6,NULL);
                LineTo(hdc,nx, by);
                MoveToEx(hdc,(ox + nx)/2,0,NULL);
                LineTo(hdc,(ox+nx)/2,sy-ay/6);
                MoveToEx(hdc,0,(oy+ny)/2,NULL);
                LineTo(hdc,sx - ax / 6, (oy + ny) / 2);
                MoveToEx(hdc,bx + ax/6,(oy + ny)/2,NULL);
                LineTo(hdc, rt.right,(oy+ny)/2);
                MoveToEx(hdc,(ox + nx)/2,by+ay/6,NULL);
                LineTo(hdc,(ox + nx)/2,rt.bottom);
                MoveToEx(hdc,ax/2+sx-Min(ax,ay)/12,ay/2+sy,NULL);
                LineTo(hdc,ax/2+sx+Min(ax,ay)/12+1,ay/2+sy);
                MoveToEx(hdc,ax/2+sx,ay/2+sy-Min(ax,ay)/12,NULL);
                LineTo(hdc,ax/2+sx,ay/2+sy+Min(ax,ay)/12+1); 
            } 
            break;
            
        case WM_LBUTTONUP:
           //  down=0;
             if(ax!=0 && ay!=0)
             {
                hBrush=(HBRUSH)GetStockObject(WHITE_BRUSH);
                SelectObject(hdc,hBrush);
                Rectangle(hdc,sx-1,sy-1,bx+1,by+1);
                
                HDC hScrDC=GetDC(NULL);
                HDC hMemDC=CreateCompatibleDC(NULL);
                HBITMAP hBitmap=CreateCompatibleBitmap(hScrDC,ax,ay);
                HBITMAP hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBitmap); 
                BitBlt(hMemDC,0,0,ax,ay,hScrDC,sx,sy,SRCCOPY);
                hBitmap=(HBITMAP)SelectObject(hMemDC,hOldBitmap); 
                      
                if( OpenClipboard(hwnd) )    
                {
                    EmptyClipboard();
                    SetClipboardData(CF_BITMAP,hBitmap);
                    CloseClipboard();        
                }
                
                ReleaseDC(NULL,hScrDC); 
                DeleteDC(hMemDC);
                DeleteObject(hBitmap);
                DeleteObject(hOldBitmap);
                MessageBeep(MB_ICONASTERISK);
                EndPaint(hwnd,&ps);
                SelectObject(hdc,hOldpen);
                SelectObject(hdc,hOldbrush);
                DeleteObject(hPen);
                DeleteObject(hBrush);
                ReleaseDC(hwnd,hdc);
                PostQuitMessage (0);
             }
             else     PostQuitMessage (0);
             break;
             
        case WM_RBUTTONUP:
             PostQuitMessage (0);
             break;
             
        case WM_KEYDOWN:     
             if(wParam==VK_ESCAPE)   PostQuitMessage (0);
             break;
             
        default:                      
             return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}

---

 

下载

  

分类:

技术点:

相关文章: