您的位置:首页 > 其它

一些很简单的MFC窗体控制的办法,有的是知道的保存一下。不断更新积累(一)

2008-04-30 09:02 405 查看
如何取消标题栏,只保留工具栏?
在MFC 7.0里面
自动生成的单文档框架里面?
---------------------------------------------------------------

显示和隐藏标题栏

方法一:使用API实现
//隐藏TitleBar
LONG lStyle = ::GetWindowLong(this->m_hWnd, GWL_STYLE);
::SetWindowLong(this->m_hWnd, GWL_STYLE, lStyle & ~WS_CAPTION);
::SetWindowPos(this->m_hWnd, NULL, 0, 0, 0, 0,
SWP_NOSIZE ¦ SWP_NOMOVE ¦ SWP_NOZORDER ¦ SWP_NOACTIVATE ¦ SWP_FRAMECHANGED);

// 显示TitleBar
::SetWindowLong(this->m_hWnd, GWL_STYLE, lStyle ¦ WS_CAPTION);
::SetWindowPos(this->m_hWnd, NULL, 0, 0, 0, 0,??SWP_NOSIZE ¦ SWP_NOMOVE ¦ SWP_NOZORDER ¦ SWP_NOACTIVATE ¦ SWP_FRAMECHANGED);

方法二:使用CWnd成员函数ModifyStyle实现
// 隐藏TitleBar
ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED);
// 显示TitleBar
ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED);

以上代码,放置在CMainFrame的OnCreate函数的尾部即可

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

bitmap.LoadBitmap(IDB_FIND); //IDB_FIND是导入到资源的一张BMP图片。

m_static.Create(_T("PIC"),SS_CENTER | WS_CHILD | SS_BITMAP | SS_CENTERIMAGE,
CRect(30,80,62,112),this,66666);
m_static.ModifyStyle(0xF,SS_BITMAP); //这个不能少。
m_static.SetBitmap((HBITMAP)bitmap);
m_static.ShowWindow(TRUE);

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
DLL调用方法下使用。如果缺少组建记得加DLL。。。

第一种:
Button属性页里Style的Bitmap点上

CBitmap Bitmap;
Bitmap.LoadBitmap(IDB_BITMAP1);
HBITMAP hBitmap=(HBITMAP)Bitmap.Detach();
CButton *pButton=(CButton*)GetDlgItem(IDCANCEL);
pButton->SetBitmap(hBitmap);

感觉效果不是很好。因为图片不会自动拉伸。

第二种:
可以采用CButtonST控件,挺好用的,比MFC的那些封装好用。

第三种:
把button按钮属性设置为ower draw
然后映射onDrawItem消息
在ondraw函数内自己绘制就可以了
void CUi6Dlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if(nIDCtl == IDC_HELLO_CFAN)
{
//绘制按钮框架
UINT uStyle = DFCS_BUTTONPUSH;
//是否按下去了?
if (lpDrawItemStruct->itemState & ODS_SELECTED)
uStyle |= DFCS_PUSHED;
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
dc.DrawFrameControl(&lpDrawItemStruct->rcItem, DFC_BUTTON, uStyle);
//输出文字
dc.SelectObject(&m_Font);
dc.SetTextColor(RGB(0, 0, 255));
dc.SetBkMode(TRANSPARENT);
CString sText;
m_HelloCFan.GetWindowText(sText);
dc.TextOut(lpDrawItemStruct->rcItem.left + 20, lpDrawItemStruct->rcItem.top + 20, sText);
//是否得到焦点
if(lpDrawItemStruct->itemState & ODS_FOCUS)
{
//画虚框
CRect rtFocus = lpDrawItemStruct->rcItem;
rtFocus.DeflateRect(3, 3);
dc.DrawFocusRect(&rtFocus);
}
return;
}
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

第四种:

1,按钮属性 Onwer Drew选上,按钮ID: IDC_BUTTON1
2,定义private变量:
CBitmapButton m_button;
3,在初始化里边
m_button.LoadBitmaps(IDB_BITMAP1, IDB_BITMAP2);//IDB_BITMAP1:平时;IDB_BITMAP2:按下
m_button.SubclassDlgItem(IDC_BUTTON1, this);
m_button.SizeToContent();
这种方法还可以。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//======================界面处理==============================//
// 全屏显示对话框,全屏显示才能正常调用背景图片
//add by mercury xu 20080502
int cx, cy;
cx = GetSystemMetrics(SM_CXSCREEN);//获取屏幕的水平尺寸
cy = GetSystemMetrics(SM_CYSCREEN);//获取屏幕的垂直尺寸
SetWindowPos(&wndTopMost, 0, 0, cx, cy, SWP_SHOWWINDOW);
// 加载背景图片
CPaintDC dc(this);
CRect rect;
GetClientRect(rect);

CDC *pMemDC=new CDC;
CBitmap bmpTitle;
CBitmap *poldBitmap;
BITMAP bmpTemp;

if (pMemDC)
{
bmpTitle.LoadBitmap(IDB_BG);
bmpTitle.GetObject(sizeof(BITMAP), &bmpTemp);

pMemDC->CreateCompatibleDC(&dc);
poldBitmap=pMemDC->SelectObject(&bmpTitle);
dc.StretchBlt(0, 0, rect.right, rect.bottom, pMemDC,
0, 0, bmpTemp.bmWidth, bmpTemp.bmHeight, SRCCOPY);
pMemDC->SelectObject(poldBitmap);
delete pMemDC;
}
//add by mercury xu 20080502

//======================界面处理==============================//
//add by mercury xu 20080809

int SmallTarget1[56]={xxxx};
int SmallTarget2[56]={xxxx};
memcpy(SmallTargetL,SmallTarget1,sizeof(SmallTarget1));
memcpy(SmallTargetR,SmallTarget2,sizeof(SmallTarget2));

//了解一个如何在VC++中给数组赋值的方法
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
OnPaint()函数中加上界面控制背景重画可以解决一部分背景更新时出现花屏现在的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: