16,472
社区成员
发帖
与我相关
我的任务
分享
BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
for(int i=0;i<10;i++)
{
m_comboTest.AddString("1");
}
m_comboTest.SetCurSel(0);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
// Derived class is responsible for implementing these handlers
// for owner/self draw controls (except for the optional DeleteItem)
void CComboBox::DrawItem(LPDRAWITEMSTRUCT)
{ ASSERT(FALSE); }
void CComboBox::MeasureItem(LPMEASUREITEMSTRUCT)
{ ASSERT(FALSE); }
int CComboBox::CompareItem(LPCOMPAREITEMSTRUCT)
{ ASSERT(FALSE); return 0; }
void CComboBox::DeleteItem(LPDELETEITEMSTRUCT)
{ /* default to nothing */ }
class CLegendDialog : public CDialog
{
DECLARE_DYNAMIC(CLegendDialog)
public:
CLegendDialog(CWnd* pParent = NULL); // 标准构造函数
virtual ~CLegendDialog();
// 对话框数据
enum { IDD = IDD_DIALOG_LEGEND };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
ClithologyCombox m_comboLitho;
public:
virtual BOOL OnInitDialog();
};
BOOL CLegendDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
for(int i=0;i<10;i++)
{
m_comboLitho.AddString("1");
}
m_comboLitho.SetCurSel(0);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
CComboBox m_comboTest;
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO1, m_comboTest);
}
#pragma once
#include "LithologySymbol.h"
// ClithologyCombox
class ClithologyCombox : public CComboBox
{
DECLARE_DYNAMIC(ClithologyCombox)
public:
ClithologyCombox();
virtual ~ClithologyCombox();
protected:
DECLARE_MESSAGE_MAP()
public:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
protected:
virtual void PreSubclassWindow();
private:
void DrawItemLith(LPDRAWITEMSTRUCT lpDrawItemStruct);
void PreSubclassWindowLith();
}
// lithologyCombox.cpp : 实现文件
//
#include "stdafx.h"
#include "lithologyCombox.h"
// ClithologyCombox
IMPLEMENT_DYNAMIC(ClithologyCombox, CComboBox)
ClithologyCombox::ClithologyCombox()
{
m_type = 0;
VERIFY(m_MyFontOfHead.CreateFont(
12, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("宋体"))); // lpszFacename
m_LithologySymbol.LoadData();
}
ClithologyCombox::~ClithologyCombox()
{
}
BEGIN_MESSAGE_MAP(ClithologyCombox, CComboBox)
END_MESSAGE_MAP()
// ClithologyCombox 消息处理程序
//调用以在所有者描述的控件中绘制项
void ClithologyCombox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: 添加您的代码以绘制指定项
DrawItemLith(lpDrawItemStruct);
}
void ClithologyCombox::DrawItemLith(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
int iItem = lpDrawItemStruct->itemID;
if (iItem < 0)
{
return;
}
CDC *pDC = NULL;
pDC=new CDC;
pDC->Attach(lpDrawItemStruct->hDC);
int iState = lpDrawItemStruct->itemState;
COLORREF crColor = 0;
COLORREF crNormal = GetSysColor(COLOR_WINDOW);
COLORREF crSelected = GetSysColor(COLOR_HIGHLIGHT);
CRect rect(&(lpDrawItemStruct->rcItem));
if(iState & ODS_SELECTED)
{
pDC->SetROP2(R2_NOT);
pDC->FillSolidRect(rect,RGB(0,0,255));
crColor = RGB(255,255,255);
}
else
{
pDC->SetROP2(R2_COPYPEN);
pDC->SetBkColor(crNormal);
pDC->FillSolidRect(&rect,crNormal);
}
//画岩性道
COLORREF nColor;
//nColor = RGB(255,255,255);
nColor = RGB(192, 192, 192);// 浅灰色
m_lithologyName = m_LithologySymbol.m_LithScript.m_arrName[iItem];
int fMinus,fOffset;
m_mainLithScript = m_LithologySymbol.GetMainLithSctipt(m_lithologyName,fMinus,fOffset);
m_MinusWidth = fMinus;
m_LineOffset = fOffset;
m_strSecondScript = m_LithologySymbol.GetSecondaryLithSctipt(m_lithologyName);
rect.NormalizeRect();
CRect m_RectLith = CRect(rect.left,rect.top,
rect.CenterPoint().x,rect.bottom);//岩性绘制区域
CRect m_RectText = CRect(rect.CenterPoint().x,rect.top,
rect.right,rect.bottom); //岩性名称绘制区域
m_RectLith.DeflateRect(2,2,5,2);
m_LithologySymbol.m_DrawLith.Draw(pDC,
m_RectLith,
m_mainLithScript,
m_strSecondScript,
0,0,//(int)m_MinusWidth,(int)m_LineOffset,
_T(""),nColor);
CPen pen,*Oldpen;
pen.CreatePen(PS_SOLID,1,crColor);
Oldpen = pDC->SelectObject(&pen);
//绘制岩性名称
CFont* def_font = pDC->SelectObject(&(m_MyFontOfHead));
pDC->SetTextColor(crColor);
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextAlign(TA_LEFT);
CRect m_r = m_RectText;
m_r.DeflateRect(10,2,10,2);
DrawText(pDC->m_hDC, m_lithologyName, -1, m_r,DT_LEFT|DT_SINGLELINE|DT_VCENTER | DT_NOPREFIX);
pDC->SelectObject(def_font);
CBrush brush1,* pOldBrush1;
pOldBrush1 = pDC->SelectObject(&brush1);
pDC->SelectObject(Oldpen);
pen.DeleteObject();
pDC->SelectObject(pOldBrush1);
brush1.DeleteObject();
pDC->Detach();
delete pDC;
pDC = NULL;
}
//在对象附加到现有窗口后调用
void ClithologyCombox::PreSubclassWindow()
{
// TODO: 在此添加专用代码和/或调用基类
PreSubclassWindowLith();
CComboBox::PreSubclassWindow();
}
void ClithologyCombox::PreSubclassWindowLith()
{
int size = (int)(m_LithologySymbol.m_LithScript.m_arrSctipt.GetSize());
for (int nstyles = 0; nstyles < size; nstyles++)//
{
AddString(_T(""));
//SetItemHeight(nstyles,40);//列表框中每一项的高度
}
// Select the first color when the control is created.
SetCurSel(0);
}