zoukankan      html  css  js  c++  java
  • 我的第一个MFC小项目(1)之 初来咋到

    虽然是小项目,但是还是有点挑战性的,因为从来没有做过一个比较正式的项目;之前在编程过程当中,都是比较粗糙,想到什么就写什么,在没有一个系统的架构前提之下,虽可谓倚马可待,但bug很多,多到自己想法都没有了,最后不得不丢下个“四不像”的一堆代码。

    找个借口原谅自己就是自觉阅读之前写下的代码,然后认真总结和分析,谈谈自己的收获。

    其实也没什么,就一个处理图像的东西,很多的东西已经被sdk封装了,其实你能使用sdk到游刃有余的地步,那也是一种强的表现了,别被别人的闲言冷语冷落到“认为sdk没出息”。

    重要的不是你学会了sdk什么的,重要的是你在完成一个任务的过程当中的收获,more or less。

    功能列表

    文件

    获取图片信息

    图像操作

    打开

    像素宽度

    移动

    *重新加载

    像素高度

    旋转

    另存为

    两点距离

    放大

    保存

    每行象素所占字节数

    缩小

    退出

    当然还有一些具体的要求。

    因为需要用到显示位图,所以我也突发奇想要自定义一个控件,专门用来对付位图的处理,包括移动旋转之类的,感受到了吧,OO。开始的时候不去借助网络资源,自己操手干起来,但是遇到的问题还是蛮多的。

    离开了win32一段时间了,来到MFC就忘本了。现在背背,

    image

    大概的过程就是这个(其实还是翻了书)。

    自定义控件的思路也是这样的,只是createwindow之后的东西(消息处理过程还是要我们操手)IDE帮我们做好了,注意就算在win32下我们还是要对控件createwindow的。上面说消息处理过程还是要自己动手,就是标准控件的消息处理过程已经被包装好了,但是我们自定义的控件会有我们自己想要处理的消息。

    在对话框资源窗口添加了Custom Control之后,在属性对话框中要增加Class,在这里要注意填写的是你的注册窗口类而不是你的窗口类,明白人懂的。

    添加了一个窗口类(继承自CWnd)之后,里边什么都没有,当然除了动态创建,消息映射,以及CWnd的一些函数还是有的,因为这是CWnd自有的,“爸爸有,儿子也要有”(C++里边的“遗传”好蛋疼)。任何一个窗口都要注册窗口类,所以一定要先在构造函数里面注册好。代码如下:

    BOOL CBMPViewer::RegisterWndClass() 
    { 
        WNDCLASS windowclass;  
        HINSTANCE hInst = AfxGetInstanceHandle(); 
    
        windowclass.style =  CS_HREDRAW | CS_VREDRAW |CS_OWNDC;  
        windowclass.lpfnWndProc = ::DefWindowProc;  
        windowclass.cbClsExtra = windowclass.cbWndExtra = 0;  
        windowclass.hInstance = hInst;  
        windowclass.hIcon = NULL;  
        windowclass.hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);  
        windowclass.hbrBackground =(HBRUSH)::CreateSolidBrush(#808a87); 
        //::GetSysColorBrush(COLOR_WINDOW);  
        windowclass.lpszMenuName = NULL;  
        windowclass.lpszClassName = L"MYCLASS"; 
    
        if (!AfxRegisterClass(&windowclass))  
        {  
            AfxThrowResourceException();  
            return FALSE;  
        }  
        return TRUE; 
    }

    之后的话就不废话了,想干嘛就干嘛。

    在自定义控件当中只有在onpaint()中的设备环境才是有效的,在其他的方法当中你也无法get到,这让我很疑惑,调试了一下,发现连hwnd都是unused的(好奇怪)。如果你发现了,就告诉我。

    传送门:

    我的第一个MFC小项目(2)之 初涉位图


    捣乱小子 2011-11-18

     

    更多请访问:http://daoluan.net
  • 相关阅读:
    jsp Ajax请求(返回xml数据类型)
    springboot整合mybatis
    springboot使用jdbcTemplate案例
    springboot使用jpa案例
    使用SpringBoot访问jsp页面
    SpringBoot使用thymeleaf案例
    SpringBoot
    Dobbox
    Spring Jpa
    SSM整合Dubbo登陆案例
  • 原文地址:https://www.cnblogs.com/daoluanxiaozi/p/2254755.html
Copyright © 2011-2022 走看看