-
VC++在视图中使用鼠标进行绘图操作(涂鸦)
VC++ ——在视图中使用鼠标进行绘图操作(涂鸦),按下鼠标左键,载入"十字"光标,移动鼠标即可实现绘制图形,但窗口不能自动重绘,定义各变量及具体实现:
void CBaseDocViewDemo1View::OnLButtonDown(UINT nFlags, CPoint point)
{
SetCursor(m_Hcursor);//使用新光标
m_bDraw=TRUE;//进入绘图状态
m_pOld=point;
SetCapture();//捕捉鼠标
CRect rect;
GetClientRect(&rect);//获取客户窗口矩形区域
ClientToScreen(&rect);//转换为屏幕坐标
ClipCursor(rect);//限定鼠标不能移出客户窗口
CView::OnLButtonDown(nFlags, point);
}
void CBaseDocViewDemo1View::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bDraw=FALSE;//取消绘图状态
ReleaseCapture();//释放鼠标捕捉
ClipCursor(NULL);//取消鼠标区域的限制
CView::OnLButtonUp(nFlags, point);
}
- 2023-04-03 12:40:04下载
- 积分:1
-
VC++6.0实现ListCtrl列表控件拖放、整栏选择和显示网格
VC++6.0实现列表控件的扩展风格——拖放、整栏选择和显示网格等功能,通过这个源代码你可以熟悉VC中的ListCtrl列表控件的多种用法,运行效果如示例截图所示,部分代码如下:
DWORD liststyle=m_ctlList.GetExtendedStyle();//获取列表控件的扩展风格m_ctlList.SetExtendedStyle(liststyle|LVS_EX_HEADERDRAGDROP|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);//设置列表控件的新扩展风格
m_pImageList.Create(16, 16, ILC_COLOR, 2, 2);//创建图像列表
CBitmap bm;
bm.LoadBitmap(IDB_BITMAP1);//载入Bitmap资源
m_pImageList.Add(&bm, RGB(0, 0, 0));//添加到图像列表
bm.DeleteObject();
bm.LoadBitmap(IDB_BITMAP2);
m_pImageList.Add(&bm, RGB(0, 0, 0));
//初始化列表视
m_ctlList.SetImageList(&m_pImageList,LVSIL_SMALL);//设置ImageList
CString Field[2]={"性别","姓名"};//列表视的表头
for(int j=0;j
- 2023-02-22 08:35:03下载
- 积分:1
-
VC++ 创建生成大文件
VC创建大文件的例子,这个例子是VC++源码实例,面向VC++6.0运行环境。测试时注意生成的路径,要重新 设置一下,生成文件 不是问题,但生成大文件 往往会导致一系列问题,这个源码的实例向大家介绍如何避免出现这些问题。
// 处理出错信息
//获得信息
LPVOID lpMsgBuf; //Windows will allocate
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,0,
GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言
(LPTSTR)&lpMsgBuf, 0, NULL );
//显示
::MessageBox(0, (LPCTSTR)lpMsgBuf, _T("GetLastError"), MB_OK|MB_ICONINFORMATION );
//lpMsgBuf中是你要的错误提示.
//释放内存
::LocalFree( lpMsgBuf );
return;
- 2022-02-26 16:50:15下载
- 积分:1
-
VC++ .NET 实现窗口内控件自适应屏幕尺寸大小而变化
VC++ .NET 实现窗口内控件自适应屏幕尺寸大小而变化,这个具体点就是,窗口中的边框和按钮等元素,会随着窗口的变大自动变大,并保持原有的比例,调用了CSelfResizeWindow::Rectify()来实现,我觉得是个很实用的窗体设计技巧。关于本源代码的几点说明:
自定义类CSelfResizeWindow实现窗口和控件的自适应,根据屏幕尺寸调整大校
使用步骤 :
1. 使需要自适应的窗口类继承于类CSelfResizeWindow,在OnInitDialog()中调用
__super::Init(this, 1, 3000);(其中1和3000是资源ID的范围,在Resource.h
中用宏定义的,Init函数的参数根据情况确定。)
2. 给窗口类添加OnSize()消息响应函数,在OnSize()函数
中调用__super::Rectify();即可。
- 2023-01-25 01:40:04下载
- 积分:1
-
VC++ 使用TRY-THROW-CATCH结构捕获处理异常
VC++ 使用TRY-THROW-CATCH结构捕获处理异常,在编辑框中,要求输入100~500之间的整数,如果超过边界,认为是异常,使用TRY CATCH结构捕获处理异常,异常测试代码如下:
UpdateData(true);
try//捕获异常
{
if(m_num>500)
throw 1;//抛出异常
if(m_num
- 2023-07-20 04:55:03下载
- 积分:1
-
VC Calendar 自定义的日历选择插件
VC++ 6.0 Calendar 自定义的日历选择插件,这个功能相信大家都比较熟悉了,是用来选择日期和时间的,避免用户输入出错,选择后可把数据填充在指定的文本框内,或提交至下一个数据处理环节。这个例子是前两年的,风格和Windows XP相似,与Windows7和10版本有所区别,核心代码为:
//设置选择日期
void CCalendarDlg::OnSetCursel()
{
//更新变量
UpdateData(TRUE);
//构造日期变量
CTime tm(m_nYear,m_nMonth,m_nDay,0,0,0);
m_MonthCalCtrl.SetCurSel(tm);
}
//设置日期
void CCalendarDlg::OnSetToday()
{
//更新变量
UpdateData(TRUE);
//构造日期变量
CTime tm(m_nYear,m_nMonth,m_nDay,0,0,0);
m_MonthCalCtrl.SetToday(&tm);
m_MonthCalCtrl.SetCurSel(tm);
}
- 2022-01-25 19:36:09下载
- 积分:1
-
VC++ 表格式简历打印的实现
本源码演示在VC++中打印简历模板,是一个采用表格设计的简历界面,VC++将按设计的模式打印出来,就像使用Word打印一样的功能。
以下代码可作为参考:
//获取位图所有数据
m_bitdata = m_pRecord->GetFields()->GetItem((long)9)->GetChunk(m_factsize);
HBITMAP m_hmap ;
if (m_bitdata.vt==VT_ARRAY |VT_UI1)
{
//定义一个数据缓冲区
m_bitbuffer = new char[m_factsize];
//将m_buffer指向m_bitdata
SafeArrayAccessData(m_bitdata.parray,(void**)&m_buffer);
//复制位图数据到m_bitbuffer;
memcpy(m_bitbuffer,m_buffer,m_factsize);
SafeArrayUnaccessData(m_bitdata.parray);
void* m_factbitdata ; //实际的位图数据
//temp指向位图信息头
temp = m_bitbuffer+sizeof(BITMAPFILEHEADER);
BITMAPINFOHEADER * m_bitheader = (BITMAPINFOHEADER*)temp;
//获取位图信息,它包括位图信息头和调色板
BITMAPINFO* m_bitinfo = (BITMAPINFO*)temp;
//获取位图的实际数据
m_factbitdata = (void*)(m_buffer+((LPBITMAPFILEHEADER)m_bitbuffer)->bfOffBits);
CClientDC m_dc(this);
//创建位图
hbitmap = CreateDIBitmap(m_dc.m_hDC,m_bitheader,CBM_INIT,m_factbitdata,m_bitinfo,DIB_RGB_COLORS);
delete [] m_bitbuffer;
}
- 2022-07-02 18:31:16下载
- 积分:1
-
VC++ 6.0创建带有文本指示的自定义进度条
VC++ 6.0创建带有文本指示的自定义进度条,自己创建的带有文本的进度条:,
GetClientRect(&rectClient);//获取进度条窗口
CBrush brush;
brush.CreateSolidBrush(::GetSysColor(COLOR_3DFACE));//获取系统画刷
dc.FillRect(&rectClient, &brush);//填充进度条窗口
VERIFY(brush.DeleteObject());//删除画刷
if (m_nCurrentPosition m_nUpper)//进度条没有运行
{
return;
}
brush.CreateSolidBrush(RGB(0, 0,255));//创建蓝色画刷
RECT rectFill;//定义填充区域
float fillwidh=(float)((float)(m_nCurrentPosition-m_nLower)/(float)(m_nUpper-m_nLower))*rectClient.right;
::SetRect(&rectFill,
0,// 左上X坐标
0,//左上Y坐标
(int)fillwidh,//右下X坐标
rectClient.bottom+1);//右下Y坐标
dc.FillRect(&rectFill,&brush);//填充进度条区域
VERIFY(brush.DeleteObject());
CString percent;
percent.Format("已完成:%.0f%%", 100.0*(float)(m_nCurrentPosition-m_nLower)/(float)(m_nUpper-m_nLower));
dc.SetTextColor(RGB(255,0,0));//设置文本颜色
dc.SetBkMode(TRANSPARENT);//透明背景
dc.DrawText(percent, &rectClient, DT_VCENTER|DT_CENTER|DT_SINGLELINE);//显示文本信息
- 2023-06-16 21:25:02下载
- 积分:1
-
vc CListBox左右两个列表框互相交换数据
这是一个常见的ListBox列表框用法,在本例中,左右两个列表框互相交换数据,具体的实现思路是通过INI文件来作为中间数据媒介,将左边列表框的学生姓名写入ini文件,然后从该ini文件读出放到右边的列表框中,编写的步骤是:从ini文件中获得数量,从ini文件中获得学生,并加到右边列表中,获得学生数量,将学生写入ini文件,将学生数量写入ini文件。
- 2022-03-12 17:49:53下载
- 积分:1
-
VC++ 使用自定义消息进行线程间的通信
VC++ 使用自定义消息进行线程间的通信,在本例子中,当计数到17的整数倍时,工作线程通过自定义消息与主线程通信。最后会弹出消息框:当前计数器的计数为17的整数倍。计数器有几个选项:高速计数、低速计数,相关参数设置如下:
SpeedControl=1;
GetDlgItem(IDC_RADIO1)->EnableWindow(true);//单选按钮生效
GetDlgItem(IDC_RADIO2)->EnableWindow(true);
GetDlgItem(IDC_RADIO3)->EnableWindow(true);
GetDlgItem(IDC_STAR)->EnableWindow(false);//开始按钮无效
numinfo.pedit=&m_Num;
numinfo.hwnd=GetSafeHwnd();//获取主线程窗口指针
CWinThread* pThread=AfxBeginThread(ThreadFunc,&numinfo);//创建新的线程并开始执行
- 2023-03-13 15:00:04下载
- 积分:1