arx 块操作 头文件
//块操作头文件
//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 块操作 头文件相关推荐
- linux c 各头文件作用总结
#include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm/***.h> 是在linux ...
- c++ string 头文件_“延期不延学” 第25期 | C++篇 | C/C++常用函数
在c/c++的课程和课设中,函数的应用都是至关重要的,这里就为大家收集整理了c/c++常用的一些函数,希望大家多加应用以熟练. 1.字符处理函数 本类别函数用于对单个字符进行处理,包括字符的类别测试和 ...
- linux 头文件汇总
linux头文件 头文件目录中总共有32个.h头文件.其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个.这些头文件各自的功能如下. <a.out.h& ...
- linux中常用的头文件
#include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm/***.h> 是在linux ...
- Linux驱动开发常用头文件
头文件目录中总共有32个.h头文件.其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个.这些头文件各自的功能如下: 1.主目录 <a.out.h> ...
- 关于《十天学会AVR单片机》的教程头文件AVR_PQ1A.h
最近开始学习AVR单片机,由于之前买的51开发板是兼容AVR单片机的,所以就没有必要开发板了.于是从网上找了一个教程<十天学会AVR单片机>,也是郭天祥公司的人讲的,觉得还可以.因为没有买 ...
- 天祥电子avr视频中的AVR_PQ1A.h头文件
/* 转自:http://bbs.21ic.com/icview-135766-1-1.html */ /******************************************* 文件: ...
- 【C 语言】文件操作 ( 文件加密解密 | 使用第三方 DES 加密解密库 | 头文件导入 | 兼容 C++ 语言 | 加密解密函数说明 )
文章目录 一.导入第三方库头文件 二.头文件说明 1.兼容 C++ 语言 2.头文件导入限制 3.加密解密函数说明 一.导入第三方库头文件 对文件进行加密 , 将文件中的数据分成若干块 , 一块一块的 ...
- linux fread 头文件,Linux文件操作
Linux中一切都是文件.如普通文件,目录,设备,管道等. 操作这些文件有两种方式,调用系统函数和使用标准I/O库. 一.调用系统函数 1.文件描述符:数值类型,表示打开的文件标识 程序运行时,会首先 ...
最新文章
- 2018-3-4 nginx和Tengine 以及高并发的概念
- MATLAB知识点总结
- 使用osql执行sql脚本
- Linux学习笔记之安装mplayer过程详解
- Golang的指针类型
- 3COM小型企业有线局域网方案(三、四、五)
- Python(9):函数
- 無法在 module_path 中找出佈景主題引擎:‘clearlooks’,
- python201811210作业4
- php代码审计是什么意思,php代码审计基础篇
- 不规则图形数格子的方法_北师大版五年级数学上册数学6.1组合图形的面积微课堂、同步练习、图文解读...
- nRF52832 矩阵按键调试 同一列上的按键 任意两个按键 按下 检测不到低电平(电平拉不下来)...
- 堆排序(C语言实现)
- windows10 配置深度学习环境
- MIMO天线市场深度研究分析报告
- 浅谈二十年后电气工程前途
- GIS地图描边特效的实现
- Docker - 札记 - Cannot connect to the Docker daemon at tcp://localhost:2375. Is the docker daemon runn
- 软件测试工程师市场需求量是多少,带你探索软件测试工程师月薪是多少
- 第6周作业2-IF语句大显身手之成绩判断(网络131黄宇倩)