| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2001 人关注过本帖, 1 人收藏
标题:写了一个小东西,大家看看~~
取消只看楼主 加入收藏
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
结帖率:90%
收藏(1)
 问题点数:0 回复次数:5 
写了一个小东西,大家看看~~
恩,姐姐的计算机图形学要求写的,不过已经过时了~~~所以只能算是我自己写着玩玩~~

其实只是主要拿这个小东西试验一下我VIM的编译脚本而已~

要是不能运行或者有Bug帮忙提一下,谢谢~~~
windmill.rar (7.7 KB)


想要源代码的提一下,我再上传,等我的VIM+GCC弄好了也会上传那个的。不准备往里面加VC6了,不实用。
搜索更多相关主题的帖子: 小东西 
2008-10-18 02:21
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
程序代码:
#define _WIN32_WINNT 0x0501

#include <Windows.h>
#include <assert.h>
#include <math.h>

#define RAD 100
#define PI 3.14159265359

char *strClassName = "My Class";
HDC hDCMemory;
HBRUSH color_brush[4];

void CreateResources()
{
    int i;
    HDC hDCDisplay;
    COLORREF colors[] =
    {
        RGB(255, 0, 0), RGB(255, 255, 0),
        RGB(0, 255, 0), RGB(0, 0, 255)
    };

    for (i = 0; i < 4; i++)
        color_brush[i] = CreateSolidBrush(colors[i]);

    hDCDisplay = GetDC(NULL);
    hDCMemory = CreateCompatibleDC(hDCDisplay);
    SelectObject(hDCMemory,
                 (HGDIOBJ)CreateCompatibleBitmap(hDCDisplay, RAD * 2, RAD * 2));
    ReleaseDC(NULL, hDCDisplay);
}

void ClearResources()
{
    int i;
    for (i = 0; i < 4; i++)
        DeleteObject((HGDIOBJ)color_brush[i]);

    DeleteObject(GetCurrentObject(hDCMemory, OBJ_BITMAP));
    DeleteDC(hDCMemory);
}

void SetClientSize(HWND hWnd, int width, int height)
{
    RECT wndRect, cntRect;
    GetWindowRect(hWnd, &wndRect);
    GetClientRect(hWnd, &cntRect);
    InflateRect(&wndRect, (width - cntRect.right) / 2,
                (height - cntRect.bottom) / 2);
    SetWindowPos(hWnd, NULL, 0, 0, wndRect.right - wndRect.left,
                 wndRect.bottom - wndRect.top, SWP_NOZORDER | SWP_NOMOVE);
}

void DrawWindmill(HDC hdc, double angle)
{
    int i;
    RECT rect = {0, 0, RAD * 2, RAD * 2};
    HGDIOBJ old_pen = SelectObject(hdc, GetStockObject(NULL_PEN));
    HGDIOBJ old_brush = GetCurrentObject(hdc, OBJ_BRUSH);

    FillRect(hdc, &rect, GetStockObject(WHITE_BRUSH));

    for (i = 0; i < 4; i++, angle += PI / 2)
    {
        SelectObject(hdc, color_brush[i]);
        Chord(hdc, RAD * (cos(angle) + 1) / 2,
              RAD * (sin(angle) + 1) / 2,
              RAD * (cos(angle) + 3) / 2,
              RAD * (sin(angle) + 3) / 2,
              RAD * (cos(angle) + 1),
              RAD * (sin(angle) + 1), RAD, RAD);
    }

    SelectObject(hdc, old_brush);
    SelectObject(hdc, old_pen);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg,
                         WPARAM wParam, LPARAM lParam)
{
    static float angle = 0;
    HDC hdc;
    PAINTSTRUCT ps;
    switch (uMsg)
    {
    case WM_ERASEBKGND:
        return 0;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        DrawWindmill(hDCMemory, angle);
        BitBlt(hdc, 0, 0, RAD * 2, RAD * 2, hDCMemory, 0, 0, SRCCOPY);
        EndPaint(hWnd, &ps);
        break;
    case WM_LBUTTONDOWN:
        uMsg = WM_NCLBUTTONDOWN;
        break;
    case WM_TIMER:
        angle += PI / 180;
        if (angle >= PI * 2) angle = 0;
        InvalidateRect(hWnd, NULL, TRUE);
        break;
    case WM_SIZE:
        SetClientSize(hWnd, RAD * 2, RAD * 2);
        break;
    case WM_CREATE:
        RegisterHotKey(hWnd, 0x1234, MOD_WIN, VK_F12);
        CreateResources();
        SetTimer(hWnd, 1, 10, NULL);
        break;
    case WM_HOTKEY:
    case WM_DESTROY:
        UnregisterHotKey(hWnd, 0x1234);
        ClearResources();
        PostQuitMessage(0);
        break;
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

int CALLBACK WinMain(HINSTANCE hInst, HINSTANCE hPreInst,
                     LPSTR strCmdLine, int nCmdShow)
{
    MSG msg;
    HWND hWnd;
    WNDCLASS wc = {CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS,
                   WndProc, 0, 0, hInst,
                   LoadIcon(NULL, IDI_APPLICATION), LoadCursor(NULL, IDC_ARROW),
                   (HBRUSH)GetStockObject(WHITE_BRUSH), NULL, strClassName
                  };
    RegisterClass(&wc);
    hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST
                          | WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW,
                          strClassName, "My Window",
                          WS_POPUP,
                          CW_USEDEFAULT, CW_USEDEFAULT, 0, 0,
                          NULL, NULL, hInst, NULL);
    SetLayeredWindowAttributes(hWnd, RGB(255, 255, 255),
                               128, LWA_COLORKEY | LWA_ALPHA);
    ShowWindow(hWnd, nCmdShow);
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

/* cc_flags = -mwindows */ // 这一行是为了VIM自动添加编译选项



代码不长,不过用来测试自动补全,自动完成,TAB提示和函数原型提示,还有自动编译器选项添加还是完全够了的……VIM真是好东西…………

懂VIM的,问个问题。怎么能在匹配一个模式的时候,同时去掉这个匹配呢?
比如,要求匹配/*...*/,但是不能匹配'..../*...*/....'
我是这么做的:/'\%(''\|[^']\)*'\zs\|\/\*.*\*\/
但是这样的确是去掉了第一个'...'的匹配,但是匹配了'...'的后一个字符……我不知道这是不是VIM的Bug……
/\%('\%(''\|[^']\)*'\)\@=\|\/\*.*\*\/
这个也不行,在匹配/*...*/的同时,匹配了'...'的第一个引号“'”。

难道VIM无法处理这种情况了吗?希望知道的可以告知一下…………

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-18 08:33
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
哎……还是要枚举''和/**/的相对位置……………………

好吧,暂时先这样吧……谢谢了~~

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-18 15:56
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
不是提供了可执行文件么?

这个程序不是用20年前的旧编译器编译的……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-24 07:31
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
回复 6# 永夜的极光 的帖子
天哪……我懂了……今天又想到了人家写的那个表达式,我彻底懂了……天哪……真是太巧妙了!!!

比如你写\(ab\)\|\(cd\),那么\1和\2中间肯定有一个为空,这样,如果你想完成“去掉cd,但是留下ab”这个任务(相当于我的去掉/*....*/,但是留下'....'这个任务,尽管'...'有可能包含/*....*/),你只需要将其替换为\1就可以了:因为如果匹配了ab,那么替换为\1相当于没有改变匹配,而如果匹配了cd,那么替换为\1(这时为空)相当于删掉了这个匹配!!!

实在是太巧妙了~~

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-24 07:48
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
都说了是好玩嘛~~~嘿嘿

占内存么?恩……我想想,用的都是GDI资源,而且为了防抖还用的双缓冲,的确是有点占内存……

话说,这东西根本就是透明的,不接受你的鼠标消息,你可以“透过”它点击到下面的项目,这样的话你也没法移动是不是?

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-24 15:44
快速回复:写了一个小东西,大家看看~~
数据加载中...
 
   



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

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