| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10611 人关注过本帖
标题:2张图片如何对比的问题
只看楼主 加入收藏
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
第一个程序我看到了,很好,有进步嘛!不管你是以葫芦画瓢也好,还是什么其他也好,总之,你知道这个程序就是我要的程序,说明你脑子还比较清楚。

接下来。我来问你,那个 WndProc 起什么作用啊? 你从这个函数看到了什么?

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-10-23 01:43
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
在上面的问题回答之后, 你来做第二道题:

在Windows 界面中画一个中国的中字,  中这个字有5笔, 我要求你每一笔都用一种不同颜色, 这样这个字总共会用到 5 种颜色.

这道题也给你一天的时间.

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-10-23 02:04
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
BCCN又将升起一个新星

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-10-23 10:14
yaoguai2005
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2005-9-11
收藏
得分:0 

这个题做好了,用了个笨方法,没有用循环处理颜色显示, 其实题不难,可我到现在才弄好,基础的东西没有例题太难做了.看了半天,就是不知道 画笔函数咋样创建.看了个例题才明白,原来是那么简单. WndProc 这个函数,它的工作就是响应,拦截,处理各种窗口消息. 它是一个回调函数,当注册窗口类的时候,要把窗口消息处理函数的地址告诉Windows,Windows通过调用此函数进行消息处理。 至于更深的认识我还在查, 如果要我说从这个函数看到了什么,深的认识还真的没有, 我只知道它是WINDOWS窗口必须要有的基本函数, 我想,那些过滤,截取的软件用的就是它把, 整个WINDOWS窗口创建过程,有的函数还是不理解,我正在找资料看,越基本的东西反而越难明白 不象画笔,用了一次,我就明白了, 程序我运行过 了,用了5种颜色.就是使用的方法太笨了. #include <windows.h> #include <stdio.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd) { HWND hwnd; MSG Msg; WNDCLASS wndclass; char lpszClassName [] = "hao"; char lpszTitle [] = "hao ya";

wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hInstance = hInstance; wndclass.lpfnWndProc = WndProc; wndclass.lpszClassName = lpszClassName; wndclass.lpszMenuName = NULL; wndclass.style = CS_HREDRAW | CS_VREDRAW;

if(!RegisterClass(&wndclass)) { return 0; }

hwnd = CreateWindow(lpszClassName, lpszTitle, WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nShowCmd); UpdateWindow(hwnd); while(GetMessage(&Msg, NULL, 0, 0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; }

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; HPEN h1; HPEN h2; HPEN h3; HPEN h4; HPEN h5; switch(message) { case WM_PAINT: h1=CreatePen(PS_SOLID,0,RGB(0,255,255)); h2=CreatePen(PS_SOLID,0,RGB(255,25,0)); h3=CreatePen(PS_SOLID,0,RGB(2,255,100)); h4=CreatePen(PS_SOLID,0,RGB(10,155,10)); h5=CreatePen(PS_SOLID,0,RGB(40,5,200)); hdc = BeginPaint(hwnd, &ps); SetMapMode(hdc,MM_TEXT); SelectObject(hdc,h1); MoveToEx(hdc,100,150,NULL); LineTo(hdc,350,150); SelectObject(hdc,h2); MoveToEx(hdc,100,250,NULL); LineTo(hdc,350,250); SelectObject(hdc,h3); MoveToEx(hdc,100,150,NULL); LineTo(hdc,100,250); SelectObject(hdc,h4); MoveToEx(hdc,350,150,NULL); LineTo(hdc,350,250); SelectObject(hdc,h5); MoveToEx(hdc,220,70,NULL); LineTo(hdc,220,340); EndPaint(hwnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }

[此贴子已经被作者于2005-10-24 2:20:59编辑过]


2005-10-24 02:10
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
yaoguai2005, 很好, 写得很好嘛. 接下来, 你该知道什么是资源, 位图就是资源的一种. 我给你两天的时间, 在屏幕中显示一幅BMP 的图. 有问题可以随时问我. 我不要求你使用菜单, 你可以在你的程序中定义 文件名. 你在一步一步向着你的目标前进, 继续努力.

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-10-24 03:33
yaoguai2005
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2005-9-11
收藏
得分:0 
好的,做好了我就发上来, 看来我还的从窗口函数一点一滴的看起 首先是不会函数原型调用,(2本书连个函数实例都不给写,晕)明天还得去书店看看. 再者不知道具体代码往哪写, 以及如何声明必要的操作符,也叫句柄把. 完全糊涂了.

[此贴子已经被作者于2005-10-24 20:52:29编辑过]


2005-10-24 11:26
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
yaoguai2005, 我回去后给你发个DemoCode 看看。

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-10-25 17:58
yaoguai2005
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2005-9-11
收藏
得分:0 
谢谢师傅了
我就是不知道该在哪儿填代码
今天去书店也没有看出来啥结果
看来我的WINDOWS框架的理解和运用还是很差,
一定要深入WINDOWS框架才行,
我到底缺的是什么呢


2005-10-25 20:39
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
// 5_2.rc
pic BITMAP "TestFrame.bmp"

// 5_2.cpp
#include &lt;windows.h&gt;
long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance, int nCmdShow);
HWND hWndMain;
HDC hDC;
HDC hdcmem;
HBITMAP hBm;
BITMAP bm;
int iY = 80;
int iWindowWidth, iWindowHeight;
char cUpWarn[] = "reached the topper, can't be moved!";
char cDownWarn[] = "reached the bottom, can't be moved!";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                   LPSTR lpCmdLine, intnCmdShow)
{
    MSG Message;
    hBm = LoadBitmap(hInstance, "pic");
    GetObject(hBm, sizeof(BITMAP), (LPVOID)&amp;bm);
    iWindowWidth = 2*bm.bmWidth;
    iWindowHeight = 2*bm.bmHeight;
    if(!InitWindowsClass(hInstance))
        return FALSE;
    if(!InitWindows(hInstance, nCmdShow))
        return FALSE;
    while(GetMessage(&amp;Message, 0, 0, 0))
    {
        TranslateMessage(&amp;Message);
        DispatchMessage(&amp;Message);
    }
    return Message.wParam;
}

long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam)
{
    PAINTSTRUCT ps;
    switch(iMessage)
    {
        case WM_LBUTTONDOWN:
            iY = iY - 10;
            InvalidateRect(hWnd, NULL, 1);
            break;
        case WM_RBUTTONDOWN:
            iY = iY + 10;
            InvalidateRect(hWnd, NULL, 1);
            break;
        case WM_KEYDOWN:
            switch(wParam)
            {
            case VK_UP:
                iY = iY - 10;
                break;
            case VK_DOWN:
                iY = iY + 10;
                break;
            }
            InvalidateRect(hWnd, NULL, 1);
            break;
        case WM_CREATE:
            hDC = GetDC(hWnd);
            hdcmem = CreateCompatibleDC(hDC);
            ReleaseDC(hWnd, hDC);
        case WM_PAINT:
            hDC = BeginPaint(hWnd, &amp;ps);
            if(iY&gt;0 &amp;&amp; iY&lt;iWindowHeight/2)
            {
                SelectObject(hdcmem, hBm);
               BitBlt(hDC, 60, iY, bm.bmWidth, bm.bmHeight, hdcmem, 0, 0,SRCCOPY);
            }
            else if(iY&lt;=0)
                TextOut(hDC, 0, 0, cUpWarn, sizeof(cUpWarn-1));
            else
                TextOut(hDC, 0, 0, cDownWarn, sizeof(cDownWarn-1));
            EndPaint(hWnd, &amp;ps);
            break;
        case WM_DESTROY:
            DeleteObject(hBm);
            PostQuitMessage(0);
            return 0;
        default:
            return(DefWindowProc(hWnd, iMessage, wParam, lParam));
    }
    return 0;
}

BOOL InitWindows(HINSTANCE hInstance, int nCmdShow)
{
    HWND hWnd;
    hWnd = CreateWindow("BitmapInstance",
                        "ShowBitmapDemo",
                                         WS_OVERLAPPEDWINDOW,
                                         CW_USEDEFAULT,
                                         0,
                                         iWindowWidth,
                                         iWindowHeight,
                                         NULL,
                                         NULL,
                                         hInstance,
                                         NULL);
    if(!hWnd)
        return FALSE;
    hWndMain = hWnd;
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
    return TRUE;
}

BOOL InitWindowsClass(HINSTANCE hInstance)
{
    WNDCLASS WndClass;
    WndClass.cbClsExtra = 0;
  WndClass.cbWndExtra = 0;
    WndClass.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH));
    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    WndClass.hInstance = hInstance;
    WndClass.lpfnWndProc = WndProc;
    WndClass.lpszClassName = "BitmapInstance";
    WndClass.lpszMenuName = "Menu";
    WndClass.style = 0;
    return RegisterClass(&amp;WndClass);
}

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-10-26 01:11
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
那个WndProc 是我们主要要关心的, windows 程序中具有一个窗体, 就要有 WndProc 这么个函数, 当然函数名可以自己起.

写程序时,你要关心的就是那个窗体中发生的事件对应的是什么 message, 然后根据相应的 message  做出处理,是不是不难?

其余的其实是基本框架而已。

我们来看那个WndProc 函数,
WM_LBUTTONDOWN:
WM_RBUTTONDOWN:   
是对鼠标做出的反应

那个函数中的 switch 就是用来处理事件的,InvalidateRect(hWnd, NULL, 1); 是用于更新窗体。

WM_KEYDOWN:
是对键盘做出处理

WM_CREATE:
对窗体建立时做出处理,
hDC = GetDC(hWnd);             得到设备环境指针
hdcmem = CreateCompatibleDC(hDC);    得到内存指针
ReleaseDC(hWnd, hDC);       删除设备环境指针

WM_PAINT:  处理绘图消息
hDC = BeginPaint(hWnd, &amp;ps);  得到设备环境指针
if(iY&gt;0 &amp;&amp; iY&lt;iWindowHeight/2)  当位图完整地处于窗口中时
{
    SelectObject(hdcmem, hBm);       选入内存handle
    BitBlt(hDC, 60, iY, bm.bmWidth, bm.bmHeight, hdcmem, 0, 0,SRCCOPY);  输出位图
}
else if(iY&lt;=0)    当位图上边界超出了窗口时
   TextOut(hDC, 0, 0, cUpWarn, sizeof(cUpWarn-1));   输出警告
else   当位图下边界超出了窗口时
   TextOut(hDC, 0, 0, cDownWarn, sizeof(cDownWarn-1));  输出警告
EndPaint(hWnd, &amp;ps);  释放环境指针

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-10-26 01:29
快速回复:2张图片如何对比的问题
数据加载中...
 
   



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

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