| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1335 人关注过本帖, 1 人收藏
标题:C语言写的桌面画笔
只看楼主 加入收藏
马甲1号
Rank: 5Rank: 5
等 级:职业侠客
帖 子:68
专家分:312
注 册:2011-4-4
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:10 
C语言写的桌面画笔
写了一个早上....code如下

程序代码:
#include <windows.h>
#pragma comment(linker, "/subsystem:windows")

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static int iScrWidth, iScrHeight;
    static HDC hScrDC;
    static HDC hSaveDC;
    static HBITMAP hSaveBmp;
    static BOOL bIsDraw;
    static HPEN hPen;

    switch(uMsg)
    {
    case WM_CREATE:
        MessageBox(hWnd, TEXT("按下鼠标中间退出程序"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
        iScrWidth = GetSystemMetrics(SM_CXSCREEN);
        iScrHeight = GetSystemMetrics(SM_CYSCREEN);
        hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
        hSaveDC = CreateCompatibleDC(hScrDC);
        hSaveBmp = CreateCompatibleBitmap(hScrDC, iScrWidth, iScrHeight);
        SelectObject(hSaveDC, hSaveBmp);
        BitBlt(hSaveDC, 0, 0, iScrWidth, iScrHeight, hScrDC, 0, 0, SRCCOPY);
        bIsDraw = FALSE;
        hPen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0));
        SelectObject(hScrDC, hPen);
        SetTimer(hWnd, 1, 10, NULL);
        break;
    case WM_TIMER:
        KillTimer(hWnd, 1);
        BitBlt(hScrDC, 0, 0, iScrWidth, iScrHeight, hSaveDC, 0, 0, SRCCOPY);
        break;
    case WM_MOUSEMOVE:
        if(bIsDraw)
            LineTo(hScrDC, LOWORD(lParam), HIWORD(lParam));
        else
            MoveToEx(hScrDC, LOWORD(lParam), HIWORD(lParam), NULL);
        break;
    case WM_RBUTTONDOWN:
        BitBlt(hScrDC, 0, 0, iScrWidth, iScrHeight, hSaveDC, 0, 0, SRCCOPY);
        break;
    case WM_LBUTTONUP:
        bIsDraw = FALSE;
        break;
    case WM_LBUTTONDOWN:
        bIsDraw = TRUE;
        break;
    case WM_MBUTTONDOWN:
        SendMessage(hWnd, WM_CLOSE, 0, 0);
        break;
    case WM_DESTROY:
        DeleteObject(hSaveBmp);
        DeleteDC(hSaveDC);
        DeleteDC(hScrDC);
        InvalidateRect(NULL, NULL, TRUE);
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    return 0;
}

int Run(HINSTANCE hInstance)
{
    WNDCLASSEX                wex;
    ZeroMemory(&wex, sizeof(WNDCLASSEX));
    wex.cbSize            =    sizeof(WNDCLASSEX);
    wex.hbrBackground    =    (HBRUSH)GetStockObject(BLACK_BRUSH);
    wex.hCursor            =    LoadCursor(hInstance, IDC_ARROW);
    wex.hIcon            =    LoadIcon(hInstance, IDI_APPLICATION);
    wex.hIconSm            =    LoadIcon(hInstance, IDI_APPLICATION);
    wex.hInstance        =    hInstance;
    wex.lpfnWndProc        =    WndProc;
    wex.lpszClassName    =    TEXT("WndDesktopPen");
    wex.style            =    CS_HREDRAW | CS_VREDRAW;
   
    if( !RegisterClassEx(&wex) )
    {
        MessageBox(NULL, TEXT("RegisterClassEx Error"), TEXT("Error"), MB_OK | MB_ICONINFORMATION);
        return -1;
    }
   
    HWND hWnd = CreateWindowEx(NULL, TEXT("WndDesktopPen"), TEXT(""), WS_DLGFRAME | WS_THICKFRAME | WS_POPUP | WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, hInstance, NULL);
    if(NULL == hWnd)
    {
        MessageBox(NULL, TEXT("CreateWindowEx Error"), TEXT("Error"), MB_OK | MB_ICONINFORMATION);
        return -2;
    }
    ShowWindow(hWnd, SW_MAXIMIZE);
    UpdateWindow(hWnd);
   
    MSG msg;
   
    while( GetMessage(&msg, NULL, 0, 0) > 0 )
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow)
{
    return Run(hInstance);
}


vc6环境编译
写给新手的, 大牛勿喷


DesktopPen.7z.rar (11.08 KB)







[ 本帖最后由 马甲1号 于 2011-8-28 13:21 编辑 ]
搜索更多相关主题的帖子: C语言 桌面 
2011-08-28 13:00
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:20 
hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); 还有其它方法能够获取整个屏幕的句柄吗?

My life is brilliant
2011-08-28 13:24
马甲1号
Rank: 5Rank: 5
等 级:职业侠客
帖 子:68
专家分:312
注 册:2011-4-4
收藏
得分:0 
GetDC喽~~~~


???????
2011-08-28 13:30
hulipingo
Rank: 1
等 级:新手上路
帖 子:27
专家分:1
注 册:2010-12-13
收藏
得分:0 
能在电脑屏幕上乱画,感觉很好啊,仰望………………
2011-08-30 20:46
yegoudaozhan
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-9-1
收藏
得分:0 
好难哦,一点都看不懂
2011-09-01 16:59
langzhy
Rank: 2
等 级:论坛游民
帖 子:11
专家分:11
注 册:2011-9-3
收藏
得分:0 
这是用vc哪那个工具编的??
2011-09-03 15:23
wyl703
Rank: 1
等 级:新手上路
帖 子:5
专家分:4
注 册:2011-9-3
收藏
得分:0 
学习了,感谢楼主!
2011-09-03 15:26
短暂的生命
Rank: 1
等 级:新手上路
帖 子:8
专家分:9
注 册:2011-8-31
收藏
得分:0 
希望有一天能成为像楼主一样的高手。
2011-09-04 11:50
鬼舞曳步
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-9-8
收藏
得分:0 
哇!看得眼花,楼主学了多久啦
2011-09-08 17:21
早起de笨鸟
Rank: 1
等 级:新手上路
帖 子:25
专家分:5
注 册:2011-8-15
收藏
得分:0 
都是很牛的人啊,看不懂,以后还要继续努力!
2011-09-09 12:12
快速回复:C语言写的桌面画笔
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020733 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved