请教,金山迷你背单词那个界面是怎么做的?

microchu 2005-09-02 03:57:00
我把它的背景图片贴在自己的窗口上,
用StretchBlt改变窗口大小后会很难看,图片变形了,用BitBlt图片又填充不满,
他那个是怎么做的啊,而且,只能在窗口的右侧向右拉动窗口改变大小,这个怎么实现?
...全文
253 点赞 收藏 16
写回复
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
linuxghs 2005-09-11
to microchu() :

CBitmapButton类中有个函数LoadBitmaps(),其中有四个参数,不过你可以包含三个的。比如LoadBitmaps(IDB1,IDB2,IDB3);第四个可以不写的。呵呵,我的软件界面也用到了这个函数,不错的。
回复
microchu 2005-09-11
看了CBitmapButton的帮助和例子,发现CBitmapButton只是在选择、获得焦点、失去焦点和不可用,这四个状态的图片,跟我要的不一样,我要的是鼠标划过时图片变化,最后从CodePorject上找了一个
CHoverButton的例子搞定,呵呵.
回复
microchu 2005-09-08
晓得的人,帮忙指点一下,谢谢!!!
回复
Stefine 2005-09-08
Supporting & UP
回复
microchu 2005-09-08
:)
回复
alicewdq 2005-09-07
精神可佳~~!!!关注中~~~
回复
microchu 2005-09-07
背景现在搞定了,是将背景图片的左侧和右侧分别取固定长度的图片贴在窗体的左侧和右侧,中间的就是CStatic控件了:
void CScrollTextDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//CDialog::OnPaint();
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
BITMAP bitmap;
m_bmpBackground.GetBitmap(&bitmap);
CBitmap * pbmpold = dcMem.SelectObject(&m_bmpBackground);
dc.StretchBlt(0,0,156,rect.Height(), &dcMem,0,0,156,bitmap.bmHeight,SRCCOPY);
dc.StretchBlt(rect.Width() - 77,0,77,rect.Height(),&dcMem,bitmap.bmWidth - 77,0,77,bitmap.bmHeight,SRCCOPY);
//dc.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcMem,0,0,SRCCOPY);
}
}

现在还有个问题就是那些CBitmapButton的图片是如何变化的,从网上看到的是CBitmapButton的四个
图片状态分别是从四个bitmap资源文件得到的,而金山迷你背单词的按钮图片是三个状态图片(没有
disable状态图片)在一个图片文件中,请问我如何做才能变化CBitmapButton为这三个状态!?
回复
xiao_xiao_zi 2005-09-07
响应WM_SIZING
其中有个fwside的参数,就是方向了
回复
microchu 2005-09-06
契而不舍!顶啊
回复
microchu 2005-09-05
没办法,自己顶
回复
zyb1235 2005-09-03
我也很关注
我想知道如何实现可换皮肤但不用控件的方法
回复
microchu 2005-09-03
sorry,说错了,金山迷你背单词的窗口只能横向变化大小,
而且是只在右侧能左右拉动窗口
回复
microchu 2005-09-03
顶啊,高手都哪里去了?指点一下
回复
thisisll 2005-09-02
你是不是说他的皮肤?
以前做网页作过
类似这种皮肤用一条线(上面浅下面深1pix宽)在给的框里一个挨一个贴过去
我想他这个皮肤跟我说的可能差不多
还有就是他拉的时候只能横向拉
估计有什么属性上的限制,或者重写什么消息函数,WM_SIZE?
这个我不知道,关注
回复
thisisll 2005-09-02
你是不是说他的皮肤?
以前做网页作过
类似这种皮肤用一条线(上面浅下面深1pix宽)在给的框里一个挨一个贴过去
我想他这个皮肤跟我说的可能差不多
还有就是他拉的时候只能横向拉
估计有什么属性上的限制,或者重写什么消息,WM_SIZE?
这个我不知道,关注
回复
jjiaming 2005-09-02
没见过它的界面,如果它的界面是连续的,在“图片又填充不满”的情况下你可以紧挨着贴两幅相同的图啊

以下代码可以实现只向右拉动窗口,即你设定窗口大小的最小值,窗口便无法向左拉动而缩小窗口了
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
// TODO: Add your message handler code here and/or call default

lpMMI->ptMinTrackSize = CPoint(1024,748);
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
回复
发动态
发帖子
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
社区公告
暂无公告