可以散200分了,4个叉叉。顺便问个对话框美化的问题。

qiangv 2007-08-17 11:52:57
终于可以发200分的贴了。

问个问题:
今天弄了个对话框美化的。
自定义了函数DrawDialog,里面用渐变色将对话框的背景进行了重画。

对话框上面有几个控件。

重载回调函数DefWindowProc,注册了消息
if ( message == WM_PAINT
|| message == WM_NCPAINT
|| message == WM_NCACTIVATE
|| message == WM_NOTIFY)
DrawDialog


有个问题,当将对话框往边上托时,再拉回来控件看不见了,被背景色覆盖了。

OnEraseBkgnd 里画还是这个问题。
...全文
763 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
joyjjjz 2008-02-01
  • 打赏
  • 举报
回复
这么多牛人,俺慕名而来
fbliklz 2007-11-05
  • 打赏
  • 举报
回复
你可以试着用颜色来区分一下,
diandiliuqing 2007-08-23
  • 打赏
  • 举报
回复
接分
lyg_zy 2007-08-20
  • 打赏
  • 举报
回复
to楼主你的以下代码
CClientDC dc(this);
//CDC* pDC = GetWindowDC();

CRect rcWnd;
GetClientRect(&rcWnd);


CBrush brushBack(RGB(58, 199, 240));
CBrush* pOldBrush = dc.SelectObject(&brushBack);

::PatBlt(dc.GetSafeHdc(), 0, 0, rcWnd.Width(), rcWnd.Height(), PATCOPY);

dc.SelectObject(pOldBrush);
我试了,是有你说的问题。
CClientDC dc(this);
改为
CPaintDC dc(this);

因为CClientDC dc是不管裁切区,进行整个窗口重绘,所以你的控件不见了。
而CPaintDC dc是只刷新裁切后的需要更新的窗口区(这个时候它不会包括你的子控件区域的),所以你的控件依然可见 。



不过这样简单的改一下就可以了:

fbliklz 2007-08-20
  • 打赏
  • 举报
回复
差分下东西,借点分
jhs1982419 2007-08-18
  • 打赏
  • 举报
回复
CSortList::CSortList(CImageRetrievalView* pv)
{
m_bAsc= TRUE;
//this->m_nSortedCol = -1;
CreateSortIcons();
//GetHeaderCtrl()->SetImageList(&m_imglstSortIcons);
pView = pv;
}

CSortList::~CSortList(void)
{
m_imglstSortIcons.DeleteImageList();
m_bmpUpArrow.DeleteObject();
m_bmpDownArrow.DeleteObject();
}

//IMPLEMENT_DYNCREATE(CsercurityView, CFormView)
BEGIN_MESSAGE_MAP(CSortList, CListCtrl)
ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnLvnColumnclick)
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CSortList message handlers

void CSortList::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMListView = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: Add your control notification handler code here
//NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if( pNMListView->iSubItem == m_nSortedCol )
m_bAsc = !m_bAsc;
else
{
m_bAsc = FALSE;
m_nSortedCol = pNMListView->iSubItem;
}
SortItems( ListCompare, (DWORD)this );
SetSortIcon();
for (int i=0;i<this->GetItemCount();i++)
this->SetItemData(i, i);
pView->Invalidate();
*pResult = 0;
}


void CSortList::CreateSortIcons()
{
if (!m_imglstSortIcons.m_hImageList)
{
COLORMAP cm = {RGB(0, 0, 0), GetSysColor(COLOR_GRAYTEXT)};
m_imglstSortIcons.Create (9, 5, ILC_COLOR24 | ILC_MASK, 2, 0);
m_bmpUpArrow.LoadMappedBitmap(IDB_HDRUP, 0, &cm, 1);
m_nUpArrow = m_imglstSortIcons.Add(&m_bmpUpArrow, RGB(255, 255, 255));
m_bmpDownArrow.LoadMappedBitmap(IDB_HDRDOWN, 0, &cm, 1);
m_nDownArrow = m_imglstSortIcons.Add(&m_bmpDownArrow, RGB(255, 255, 255));
}
}

void CSortList::SetSortIcon()
{
CHeaderCtrl* pHeaderCtrl = this->GetHeaderCtrl();
ASSERT(pHeaderCtrl);

pHeaderCtrl->SetImageList(&m_imglstSortIcons);
for( int col = 0; col< GetHeaderCtrl()->GetItemCount(); col++ )
{
HDITEM hdrItem = { 0,};

hdrItem.mask = HDI_FORMAT | HDI_IMAGE;

BOOL ret = pHeaderCtrl->GetItem(col-1, &hdrItem);
ret = pHeaderCtrl->GetItem(col+1, &hdrItem);
ret = pHeaderCtrl->GetItem(col, &hdrItem);
if ( m_nSortedCol == col)
{
hdrItem.fmt = hdrItem.fmt & HDF_JUSTIFYMASK | HDF_IMAGE | HDF_STRING | HDF_BITMAP_ON_RIGHT;
if( m_bAsc )
hdrItem.iImage = m_nUpArrow;
else
hdrItem.iImage = m_nDownArrow;
}
else
{
hdrItem.fmt = hdrItem.fmt & HDF_JUSTIFYMASK | HDF_STRING;
}
pHeaderCtrl->SetItem(col, &hdrItem);
}
}

bool CSortList::GetFullRowSelect()
{
return ( GetExtendedStyle()&LVS_EX_FULLROWSELECT) == LVS_EX_FULLROWSELECT;
}

void CSortList::SetFullRowSelect( bool bFullRowSelect )
{
if( bFullRowSelect )
SetExtendedStyle( GetExtendedStyle()|LVS_EX_FULLROWSELECT );
else
SetExtendedStyle( GetExtendedStyle()&(~LVS_EX_FULLROWSELECT) );
}

bool CSortList::GetGridLines()
{
return ( GetExtendedStyle() & LVS_EX_GRIDLINES ) == LVS_EX_GRIDLINES;
}

void CSortList::SetGridLines( bool bGridLines )
{
if( bGridLines )
SetExtendedStyle( GetExtendedStyle()|LVS_EX_GRIDLINES );
else
SetExtendedStyle( GetExtendedStyle()&(~LVS_EX_GRIDLINES) );
}

int CALLBACK CSortList::ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CSortList* pList=(CSortList*)lParamSort;
int nItem1, nItem2;

LVFINDINFO FindInfo;
FindInfo.flags = LVFI_PARAM; // 指定查找方式
FindInfo.lParam = lParam1;
nItem1 = pList->FindItem(&FindInfo, -1); // 得到对应Item索引
FindInfo.lParam = lParam2;
nItem2 = pList->FindItem(&FindInfo, -1);

if((nItem1 == -1) || (nItem2 == -1))
{
TRACE("无法找到!\n");
return 0;
}

CString Str1,Str2;
Str1 = pList->GetItemText(nItem1, pList->m_nSortedCol); // 得到排序列的Text
Str2 = pList->GetItemText(nItem2, pList->m_nSortedCol);
int iCompRes = 0;
if(Str1 > Str2)
iCompRes = 1;
else if(Str1 == Str2)
iCompRes = 0;
else
iCompRes = -1;

if(pList->m_bAsc)
return iCompRes;
else
return iCompRes*-1;
return 0;
}
洪泉 2007-08-18
  • 打赏
  • 举报
回复
接分
yanxy163 2007-08-18
  • 打赏
  • 举报
回复
接分,200分怎么也得分点
魔力哥 2007-08-18
  • 打赏
  • 举报
回复
顶一下。JF
ribut9225 2007-08-18
  • 打赏
  • 举报
回复
JF
偶没自己画过
zhou1862324 2007-08-18
  • 打赏
  • 举报
回复
zhe这个问题我不会,
但还是帮你顶下
yangxingkuan 2007-08-18
  • 打赏
  • 举报
回复
jf
yangpeiyu 2007-08-18
  • 打赏
  • 举报
回复
Up ...接分加学习!!!
swoky 2007-08-18
  • 打赏
  • 举报
回复
没弄过
接分
awperpvip 2007-08-18
  • 打赏
  • 举报
回复
ShowWindow
UpdateWindow
UP
JF
zhzhxia 2007-08-18
  • 打赏
  • 举报
回复
UP
ytsoft0606 2007-08-18
  • 打赏
  • 举报
回复
接分
接分
接分
covsno 2007-08-18
  • 打赏
  • 举报
回复
边框是非客户区的吧
ncpaint
琅琊榜 2007-08-18
  • 打赏
  • 举报
回复
接分
Torch009 2007-08-18
  • 打赏
  • 举报
回复
接分
加载更多回复(26)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧