//块操作头文件

//unsigned short a = 8;
    DWORD a = 8;
    int i= sizeof(a);
    int b = 1<< a;

CString str ;
    str.Format(_T("sizeof %d---MoveLeft %d") ,i ,b    );
    AfxMessageBox(str);

#include "ArxDbgUtils.h"

BOOL CArxDialog::OnInitDialog(void)
{
    // 创建一个CImageList类的指针变量  
    //CImageList* pImageList;  
    //pImageList = new CImageList();  
    m_ImageList.Create(32, 32, ILC_COLOR32, 0, 4); // 必不可少

CButton * pBut = (CButton* )GetDlgItem(IDC_BUTTON4);
    pBut->SetWindowText(_T("GetPoint"));

CListCtrl *pListCtrl1 = (CListCtrl *) GetDlgItem(IDC_LIST1);
    pListCtrl1->ModifyStyle(0, WS_VISIBLE |    WS_CHILD  |    LVS_REPORT );
    DWORD dwExtStyles1 =pListCtrl1->GetExtendedStyle();
    pListCtrl1->SetExtendedStyle(dwExtStyles1 | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);    
    pListCtrl1->InsertColumn(0,_T("名称"),LVCFMT_LEFT,100,0);  //设置列
    
    DisplayBlocks() ;

CListCtrl *pListCtrl2 = (CListCtrl *) GetDlgItem(IDC_LIST2);
    //pListCtrl2->ModifyStyle(0, WS_VISIBLE |     WS_CHILD  |  LVS_REPORT );
    pListCtrl2->SetIconSpacing(CSize(80,80));    
    pListCtrl2->SetImageList(&m_ImageList, LVSIL_NORMAL);

return 0;
}

/

void CArxDialog::DisplayBlocks(void)
{
    CListCtrl *m_ctrlBlockListBox = (CListCtrl *) GetDlgItem(IDC_LIST1);

AcDbBlockTable *pBlockTable;
    acdbHostApplicationServices()->workingDatabase()
        ->getSymbolTable(pBlockTable, AcDb::kForRead);
    // Iterate through the block table and display 
    // the names in the list box.

ACHAR *pName ;
    AcDbBlockTableIterator *pBTItr;
    if (pBlockTable->newIterator(pBTItr) == Acad::eOk) {
        while (!pBTItr->done()) {

AcDbBlockTableRecord *pRecord;
            if (pBTItr->getRecord(pRecord, AcDb::kForRead)
                == Acad::eOk)
            {
                pRecord->getName(pName);

if (pRecord->hasPreviewIcon()) // 如果块定义包含预览图标
                { 
                    int nIndex = m_ctrlBlockListBox->GetItemCount();
                    m_ctrlBlockListBox->InsertItem(nIndex,  (CString )pName );//插入行

// 显示预览图标
                        CPaintDC dc(this);

AcDbObjectId blkTblRcdId;
                        Acad::ErrorStatus es = pBlockTable->getAt( (CString )pName, blkTblRcdId);

HBITMAP hBitmap = BlockIconToBMP(blkTblRcdId, dc.GetSafeHdc());

CStatic *m_bitmap =( CStatic *) GetDlgItem(IDC_STATIC);
                        m_bitmap->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);

HBITMAP hBitmap2 = ReplaceColor(hBitmap,   RGB(0,0,0),RGB(255,255,255)  );
                        m_bitmap->SetBitmap((HBITMAP)hBitmap2);
                        
                        CBitmap bmp;
                        bmp.Attach(hBitmap2); 
                        m_ImageList.Add(&bmp, RGB(0, 0, 0));
                        bmp.DeleteObject();
                        //
                        CListCtrl *m_ListCtrl2 = (CListCtrl *) GetDlgItem(IDC_LIST2);

int listindex;
                        LV_ITEM lvItem;

listindex = m_ListCtrl2->GetItemCount();

TCHAR *ptszText = new TCHAR[100];
                        _tcscpy(ptszText,  (CString )pName);

lvItem.mask = LVIF_IMAGE | LVIF_TEXT;
                        lvItem.iItem = listindex ;
                        lvItem.iSubItem = 0;
                        lvItem.iImage = listindex ;
                        lvItem.pszText = ptszText;

m_ListCtrl2->InsertItem(&lvItem);
                }
                
                pRecord->close();    
                    
            }    
            pBTItr->step();
        }
    }
    pBlockTable->close();
//UpdateData(FALSE);
}

///

HBITMAP CArxDialog::BlockIconToBMP(const AcDbObjectId &blkId, HDC hdc)
{
Acad::ErrorStatus es;
AcDbBlockTableRecord *pBlkTblRcd = NULL; // 块表记录的指针
AcArray<Adesk::UInt8> icon;  // 保存预览图标的数组
 
// 获得保存块表记录的预览图标的数组
try

es = acdbOpenObject(pBlkTblRcd, blkId, AcDb::kForRead);
if (es != Acad::eOk)
throw 1;
 
if (!pBlkTblRcd->hasPreviewIcon()) // 如果块定义不包含预览图标

pBlkTblRcd->close();
return NULL;
}
 
es = pBlkTblRcd->getPreviewIcon(icon);
if (es != Acad::eOk)
throw 2;
es = pBlkTblRcd->close();
if (es != Acad::eOk)
throw 3;
}
catch (...)

pBlkTblRcd->close();
return NULL; 

 
// 由icon数组获得可显示的位图
BITMAPINFOHEADER ih; // 位图信息头
memcpy(&ih, icon.asArrayPtr(), sizeof(ih));
size_t memsize = sizeof(BITMAPINFOHEADER) + ((1<<ih.biBitCount)* sizeof(RGBQUAD)); 
LPBITMAPINFO bi = (LPBITMAPINFO)malloc(memsize);  // 位图信息
memcpy(bi, icon.asArrayPtr(), memsize);
HBITMAP hbm = CreateDIBitmap(hdc, &ih, CBM_INIT,icon.asArrayPtr() + memsize, bi,DIB_RGB_COLORS);
free(bi);

return hbm;
}

/

HBITMAP CArxDialog::ReplaceColor(HBITMAP hBmp,COLORREF cOldColor,COLORREF cNewColor)
{
    HBITMAP RetBmp=NULL;
    if (hBmp)
    {   
        HDC BufferDC=CreateCompatibleDC(NULL);       // 源位图DC
        if (BufferDC)
        {
            SelectObject(BufferDC,hBmp);//选入DC中  
            HDC DirectDC=CreateCompatibleDC(NULL);      // 目标DC
            if (DirectDC)
            {
                // 获取源位图大小
                BITMAP bm;
                GetObject(hBmp, sizeof(bm), &bm);

// 初始化BITMAPINFO信息,以便使用CreateDIBSection
                BITMAPINFO RGB32BitsBITMAPINFO;
                ZeroMemory(&RGB32BitsBITMAPINFO,sizeof(BITMAPINFO));
                RGB32BitsBITMAPINFO.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
                RGB32BitsBITMAPINFO.bmiHeader.biWidth=bm.bmWidth;
                RGB32BitsBITMAPINFO.bmiHeader.biHeight=bm.bmHeight;
                RGB32BitsBITMAPINFO.bmiHeader.biPlanes=1;
                RGB32BitsBITMAPINFO.bmiHeader.biBitCount=32;
                UINT * ptPixels;

HBITMAP DirectBitmap= CreateDIBSection(DirectDC,
                    (BITMAPINFO *)&RGB32BitsBITMAPINFO,
                    DIB_RGB_COLORS,(void **)&ptPixels, NULL, 0);
                if (DirectBitmap)
                {
                    HGDIOBJ PreviousObject=SelectObject(DirectDC, DirectBitmap);
                    BitBlt(DirectDC,0,0,bm.bmWidth,bm.bmHeight,BufferDC,0,0,SRCCOPY);

// 转换 COLORREF 为 RGB
                    cOldColor = COLORREF(cOldColor);
                    cNewColor = COLORREF(cNewColor);

//如果背景色是黑色
                    if(ptPixels[0] ==cOldColor)
                    {
                        // 替换颜色
                            for (int i=((bm.bmWidth*bm.bmHeight)-1);i>=0;i--)
                            {
                                if (ptPixels[i]== cOldColor || ptPixels[i]== cNewColor ) 
                                //颜色取反
                                ptPixels[i] = 0xFFFFFF -ptPixels[i] ;                                        
                            }

}

// 修改位图 DirectBitmap
                    SelectObject(DirectDC,PreviousObject);

// 完成
                    RetBmp=DirectBitmap;
                }
                // 释放DC
                DeleteDC(DirectDC);
            }
            // 释放DC
            DeleteDC(BufferDC);
        }
    }
    return RetBmp;
    
}

void CArxDialog::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: 在此添加控件通知处理程序代码
    *pResult = 0;

//单击
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

int nSelected = pNMListView->iItem; //选择所在行的索引值
    int nSubItem = pNMListView->iSubItem;    //选择所在列的索引值

CListCtrl *m_ctrlBlockListBox = (CListCtrl *) GetDlgItem(IDC_LIST1);
    CString cr = m_ctrlBlockListBox->GetItemText(nSelected, nSubItem) ;
    //cr.Format(_T("%d-- %d-- %s"),nSelected,nSubItem, m_ctrlBlockListBox->GetItemText(nSelected, nSubItem));
    AfxMessageBox(cr) ;
}

arx 块操作 头文件相关推荐

  1. linux c 各头文件作用总结

    #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm/***.h> 是在linux ...

  2. c++ string 头文件_“延期不延学” 第25期 | C++篇 | C/C++常用函数

    在c/c++的课程和课设中,函数的应用都是至关重要的,这里就为大家收集整理了c/c++常用的一些函数,希望大家多加应用以熟练. 1.字符处理函数 本类别函数用于对单个字符进行处理,包括字符的类别测试和 ...

  3. linux 头文件汇总

    linux头文件 头文件目录中总共有32个.h头文件.其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个.这些头文件各自的功能如下. <a.out.h& ...

  4. linux中常用的头文件

    #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm/***.h> 是在linux ...

  5. Linux驱动开发常用头文件

    头文件目录中总共有32个.h头文件.其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个.这些头文件各自的功能如下: 1.主目录 <a.out.h> ...

  6. 关于《十天学会AVR单片机》的教程头文件AVR_PQ1A.h

    最近开始学习AVR单片机,由于之前买的51开发板是兼容AVR单片机的,所以就没有必要开发板了.于是从网上找了一个教程<十天学会AVR单片机>,也是郭天祥公司的人讲的,觉得还可以.因为没有买 ...

  7. 天祥电子avr视频中的AVR_PQ1A.h头文件

    /* 转自:http://bbs.21ic.com/icview-135766-1-1.html */ /******************************************* 文件: ...

  8. 【C 语言】文件操作 ( 文件加密解密 | 使用第三方 DES 加密解密库 | 头文件导入 | 兼容 C++ 语言 | 加密解密函数说明 )

    文章目录 一.导入第三方库头文件 二.头文件说明 1.兼容 C++ 语言 2.头文件导入限制 3.加密解密函数说明 一.导入第三方库头文件 对文件进行加密 , 将文件中的数据分成若干块 , 一块一块的 ...

  9. linux fread 头文件,Linux文件操作

    Linux中一切都是文件.如普通文件,目录,设备,管道等. 操作这些文件有两种方式,调用系统函数和使用标准I/O库. 一.调用系统函数 1.文件描述符:数值类型,表示打开的文件标识 程序运行时,会首先 ...

最新文章

  1. 2018-3-4 nginx和Tengine 以及高并发的概念
  2. MATLAB知识点总结
  3. 使用osql执行sql脚本
  4. Linux学习笔记之安装mplayer过程详解
  5. Golang的指针类型
  6. 3COM小型企业有线局域网方案(三、四、五)
  7. Python(9):函数
  8. 無法在 module_path 中找出佈景主題引擎:‘clearlooks’,
  9. python201811210作业4
  10. php代码审计是什么意思,php代码审计基础篇
  11. 不规则图形数格子的方法_北师大版五年级数学上册数学6.1组合图形的面积微课堂、同步练习、图文解读...
  12. nRF52832 矩阵按键调试 同一列上的按键 任意两个按键 按下 检测不到低电平(电平拉不下来)...
  13. 堆排序(C语言实现)
  14. windows10 配置深度学习环境
  15. MIMO天线市场深度研究分析报告
  16. 浅谈二十年后电气工程前途
  17. GIS地图描边特效的实现
  18. Docker - 札记 - Cannot connect to the Docker daemon at tcp://localhost:2375. Is the docker daemon runn
  19. 软件测试工程师市场需求量是多少,带你探索软件测试工程师月薪是多少
  20. 第6周作业2-IF语句大显身手之成绩判断(网络131黄宇倩)

热门文章

  1. 联想电脑中的数据丢失怎么办?分享实用有效的技巧
  2. 7.9.9路由Routers
  3. 【毕业季】在校生怎么看待毕业季?
  4. 变革时代 国内通讯云服务厂商对比介绍
  5. win10——microsoft同步用户主题桌面背景的本地位置、默认背景位置、双屏双背景图设置
  6. office2010卸载记录
  7. 三菱转以太网模块连接 FX3U/3UC系列 PLC使用步骤
  8. Oracle表空间时间点恢复技术TSPITR
  9. hdu 5145 NPY and girls (莫队算法)
  10. 【python基础知识学习(6)】面向对象编程