字体大小:
CFont m_Font;
m_Font.CreateFont(30, 25, 0, 0, 100, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_SWISS, LPCSTR("Arial"));
GetDlgItem(IDC_EDIT1)->SetFont(&m_Font, NULL);
或者:
CFont m_Font; //需放到OnInitDialog()函数外
m_Font.CreatePointFont(100, _T("Times New Roman")); //大小,字体
GetDlgItem(IDC_EDIT1)->SetFont(&m_Font);
文字居中:
CRect rect;
GetDlgItem(IDC_EDIT1)->GetClientRect(&rect);
rect.OffsetRect(4, 30);
::SendMessage(((CEdit*)GetDlgItem(IDC_EDIT1))->m_hWnd, EM_SETRECT, 0, (LPARAM)&rect);
SetDlgItemText(IDC_EDIT1, _T("hello\r\n world "));
修改背景色:
重载OnCtlColor函数,并对其改写。 ON_WM_CTLCOLOR() 有点内存泄露,不知道怎么解决,请知道的麻烦留言,谢谢
类中定义:CBrush m_brush;
构造函数中初始化:m_brush.CreateSolidBrush(RGB(126, 255, 255));
HBRUSH CpDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr;// = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何特性
switch (nCtlColor)
{
case CTLCOLOR_EDIT:
pDC->SetBkMode(TRANSPARENT);// 修改字体背景为透明
//pDC->SetBkColor(RGB(126, 255, 255));
hbr = m_edit_cbrush;// CreateSolidBrush(RGB(126, 255, 255));
break;
default:
hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
break;
}
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
//if (nCtlColor == CTLCOLOR_EDIT) {
// pDC->SetBkMode(TRANSPARENT);// 修改字体背景色为透明
// hbr = m_brush; //修改控件背景色
//}
return hbr;
}
去掉边框:
将属性中的Border置为false即可。
将button修改为owner draw 类型, 重载OnDrawItem函数,并对其改写, 在适当的位置添加下面的语句afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
ON_WM_DRAWITEM()
void CpDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);
CString strText;
((CButton *)GetDlgItem(nIDCtl))->GetWindowText(strText);
SetBkMode(lpDrawItemStruct->hDC, TRANSPARENT);
//if (lpDrawItemStruct->itemState&ODS_SELECTED)
{
CBrush brush(RGB(126, 255, 255));
dc.FillRect(&(lpDrawItemStruct->rcItem), &brush);
DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),
&lpDrawItemStruct->rcItem, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
//SetBkMode(lpDrawItemStruct->hDC, TRANSPARENT);
}
dc.Detach();
dc.DeleteDC();
CDialogEx::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
调用ON_WM_TIMER()
//定时器
SetTimer(1, 1000, NULL);
//使用
void CpDlg::OnTimer(UINT_PTR nIDEvent)
{
switch (nIDEvent)
{
case 1:
break;
default:
break;
}
CDialogEx::OnTimer(nIDEvent);
}
拖拽一个picture control 控件,改ID IDC_STATIC为IDC_STATIC1,type改为Bitmap。
CBitmap m_bitmap;
m_bitmap.LoadBitmap(IDB_BITMAP1);
CStatic *p = (CStatic*)GetDlgItem(IDC_STATIC1);
p->SetBitmap(m_bitmap);
dlg.cpp文件 构造函数中AfxGetApp()->LoadIcon()中加载的图标改为导入的icon生成的文件名,一般为IDI_ICON1
CWinThread* MyThread = AfxBeginThread(线程函数名, NULL);
STARTUPINFO si;
PROCESS_INFORMATION pi;
si = { 0 };
pi = { 0 };
BOOL fSuccess = CreateProcess(NULL, "./hello.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
if (fSuccess)
{
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
注意:非管理员用户不能阻塞管理员用户exe。
在已有函数中增加
void CpDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast(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
{
//修改背景色
CRect rc;
GetClientRect(&rc);
CPaintDC dc(this);
dc.FillSolidRect(&rc, RGB(203, 255, 255));
CDialogEx::OnPaint();
}
}
需将button按钮的Owner Draw设为False, Icon设置为True
HICON hIcon = AfxGetApp()->LoadIcon(IDI_ICON2);
((CButton*)GetDlgItem(IDC_BUTTON2))->SetIcon(hIcon);
在.cpp文件的头文件中声明CToolTipCtrl的类对象m_Ttc:
CToolTipCtrl m_Ttc;
在Dlg.cpp的初始化函数OnInitDialog()中设置m_Ttc:
m_Ttc.Create(this); //必需
EnableToolTips(true); //设置是否启用提示
m_Ttc.SetDelayTime(0); //设置延迟,如果为0则不等待
m_Ttc.SetTipTextColor( RGB(0,0,255) ); //设置提示文本的颜色
m_Ttc.SetTipBkColor( RGB(255,255,255)); //设置提示框的背景颜色
m_Ttc.SetMaxTipWidth(600);//设置提示文本框的最大宽度
m_Ttc.Activate(TRUE); //设置是否启用提示
m_Ttc.AddTool(GetDlgItem(IDC_BUTTON1), _T("功能预留"));//绑定控件ID 显示提示内容
m_Ttc.AddTool(GetDlgItem(IDC_BUTTON2), _T("新建工程"));
项目右键选择类向导,类名选择Dlg,切换到:虚函数,找到PreTranslateMessage,点击添加函数。
在函数中加入:
if (pMsg->message == WM_MOUSEMOVE)
m_Ttc.RelayEvent(pMsg);
在函数InitInstance()中添加下面程序
HANDLE m_hMutex = CreateMutex(NULL, TRUE, "power_spectrum");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
AfxMessageBox(TEXT("只能启动一个程序"));
return FALSE;
}
CMutex mutex;//cpp文件里添加不要放在函数内
CSingleLock singleLock(&mutex);//函数内
singleLock.Lock();
//内容
singleLock.Unlock();
srand((unsigned)time(NULL));
double d = rand() / 100.00;