-
VC++ MDI多文档位图的复制和粘贴功能实现
多文档(MDI):实现在多个文档中位图的复制和粘贴操作,使用说明:打开一个图像,使用“编辑”菜单中的“复制”和“粘贴”对图像进行操作,清除剪切板的内容,拷贝DIB!
CMDICopyBitmapDoc* pDoc = GetDocument();
pDoc->ReplaceHDIB(hNewDIB); // 释放旧的DIB
pDoc->InitDIBData(); // 建立新的调色板及尺寸
pDoc->SetModifiedFlag(TRUE);
SetScrollSizes(MM_TEXT, pDoc->GetDocSize());
OnRealizePal((WPARAM)m_hWnd,0); // 实现新的调色板
pDoc->UpdateAllViews(NULL);
- 2022-01-25 22:15:31下载
- 积分:1
-
VC++6.0 窗口过程函数及消息发送、响应测试实例
VC++6.0 窗口过程函数及消息发送、响应测试实例,在应用程序中窗口过程函数及其消息发送、响应机制的使用,能够方便程序集中处理各类消息,使得整个程序的架构更加合理、清晰。窗口过程函数及其消息发送、响应机制的使用方法:
⑴自定义消息:
在Resource.h文件中自定义消息:#define WM_MYMSG 2000
⑵添加窗口过程函数的声明和实现体:
①在.h文件中添加窗口过程函数声明:
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
②在.cpp文件中添加窗口过程函数实现体:
⑶发送消息的方式比较:
①this->SendMessage(WM_MYMSG,0,0);
②this->PostMessage(WM_MYMSG,0,0);
③this->SendNotifyMessage(WM_MYMSG,0,0);
这三个函数都可以将指定的消息发送到某个窗口,但是这三种消息的发送方式存在如下的区别:SendMessage立即调用窗口过程函数,而且直到窗口过程函数处理完消息后才返回。PostMessage则是将指定的消息寄送到窗口消息队列后立即返回。对于SendNotifyMessage来说,如果窗口是调用线程创建的,SendNotifyMessage为该窗口调用窗口过程函数,并且等待窗口过程函数处理完消息后才返回;如果窗口是由不同的线程创建的,SendNotifyMessage将指定的消息传给窗口过程函数后立即返回。
- 2023-03-05 04:00:03下载
- 积分:1
-
VC++ 向程序中手工添加WinHelp帮助文件
VC++ 向程序中手工添加WinHelp帮助文件,也就是在程序中调用帮助。一个完善的软件系统,不可缺少帮助系统。本程序演示在VC++开发中,手动从外部添加WinHelp帮助文件,本实例 中是添加调用了Windows7系统中的两个帮助文件,点击菜单项的“帮助”,选择“帮助主题”和“绘制直线帮助”两个功能,即可演示本功能的效果。
- 2022-01-25 14:39:21下载
- 积分:1
-
VC++ ChatRoom聊天室(客户端+服务端)
VC++ 聊天室(客户端+服务端),CS架构的ChatRoom聊天源码,服务端用来创建公共的聊天服务,比如创建用户列表、显示聊天消息、监控用户数量和在线人数;客户端是提供给用户使用的真正聊天程序,可完成大部分的聊天操作,比如发送聊天内容、选择私聊对象、查看聊天黑名单、设置加密传输消息、设置加密密钥、密文、选择发送表情、自定义昵称等功能。聊天窗口通过调主对话框的成员函数GetMessage来显示聊天信息,当用户数增加时,播放欢迎音乐,当用户数减少时播放离开音乐。
源代码部分,请参照源码目录中命名的文件夹,查看对应功能。
- 2022-03-02 10:15:20下载
- 积分: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 实现选中项缩进的列表框,选中列表项后,该项缩进,文本显示为红色,自定义列表框控件,注意观察选中后的特性,重载控件的DrawItem函数。下面来看实现这一功能的代码段:
dc.Attach(lpDrawItemStruct->hDC);//获取列表框的DC
CRect rect(lpDrawItemStruct->rcItem);//获取列表框的矩形区域
COLORREF bk = dc.GetBkColor();//背景颜色
COLORREF fg = dc.GetTextColor();//系统文本颜色
if(lpDrawItemStruct->itemState & ODS_SELECTED)//该项被选中
{
bk = RGB(180,180,0 );//背景颜色
fg = RGB(255,0,0 );//红色文本
}
dc.SetTextColor(fg);
CBrush brush(bk);
dc.FillRect(&rect,&brush);
if (lpDrawItemStruct->itemState&ODS_SELECTED)
rect.left +=25;//缩进25个象素
int nBkMode = dc.SetBkMode( TRANSPARENT );
CString str;
GetText(lpDrawItemStruct->itemID,str) ;
dc.DrawText(str, &rect, DT_LEFT|DT_VCENTER);//显示文本
dc.SetTextColor(fg);
dc.SetBkMode( nBkMode );
dc.Detach() ;
- 2022-06-13 09:32:23下载
- 积分:1
-
VC++三种直线扫描转换算法范例演示
本源码演示了三种VC++直线扫描转换算法,这3种方式是:bresenham方法、数值微分法、中点画线法。本程序同时是一个MFC单文档程序,进行直线段扫面转换算法的算法验证。
1.使用Wizard建立单文档程序;
2.绘制20*20的网格线,格子X和Y方向间隔均为20像素,网格起始坐标在(20,20)。我们使用此网格模拟像素矩阵(),格子交叉点是像素中心。
3.输入直线段两端点,可使用以下两种方法之一:
a)对话框输入
b)鼠标在网格内以鼠标左键按下-拖动-抬起方式输入。注意:直线段两端点要自动取整到模拟的像素中心位置
4.进行直线段扫描转换,通过点击鼠标右键调用方式或者菜单调用的方式执行。计算完成后,将扫描转换结果,在模拟的像素矩阵中,使用圆形显示出来。
通过这个实验,我们可以熟悉扫描的算法,其中要注意的是判断直线的斜率,分情况处理竖直直线段、斜率绝对值大于1、斜率绝对值小于1的情况,这部分需要花费一些时间去算。总之还是对扫描算法的理解和编程基矗
- 2022-03-19 09:46:38下载
- 积分: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++ 使用不同的画笔绘制图形
VC++ 使用不同的画笔绘制图形,演示绘制矩形、绘制多段折线、绘制椭圆、弧形和饼图,使用不同的画笔类型来绘制不同的几何图形,演示了一些VC++图形绘制的基础技巧使用方法。下面的代码演示了如何绘制出这些图形:
//以实线画笔绘制矩形
pOldPen=pDC->SelectObject(&pen[0]);
pDC->Rectangle(10, 10, 110, 110);
pDC->TextOut(10, 115, "绘制矩形");
//使用虚线画笔和函数Polyline输出多段折线
pDC->SelectObject(&pen[1]); //载入虚线画笔
CPoint pts[]={CPoint(190, 20), CPoint(200, 60), CPoint(270, 40), CPoint(210, 80),
CPoint(250, 100), CPoint(300, 30), CPoint(310, 80)};
pDC->Polyline(pts, 7); //绘制多端折线
pDC->TextOut(180, 115, "绘制多段折线");
// 使用Pie和Arc输出饼图和弧形
pDC->SelectObject(&pen[2]); //载入点线画笔
pDC->Ellipse(10, 140, 160, 240);//绘制椭圆
pDC->SelectObject(&pen[3]); //载入点划线画笔
pDC->Pie(20, 150, 150, 230, 160, 160, 10, 160);
pDC->SelectObject(&pen[4]);//载入双点划线画笔
pDC->Arc(20, 150, 150, 230, 10, 220, 160, 220);
pDC->TextOut(10, 245, "绘制椭圆、弧形和饼图");
pDC->SetTextColor(RGB(0,0,255));
pDC->TextOut(220, 200, "使用不同的画笔绘制各种图形");
//恢复设备上下文的原有画笔
pDC->SelectObject(pOldPen);
//删除所创建的画笔资源
for (int i=0; i
- 2022-02-13 06:16:01下载
- 积分:1
-
VC 多种进制转换 二进制 十六进制等
VC++ 进制转换,可完成以下转换:转换十进制数,转换二进制数,转换十六进制数,转换十六进制为二进制,转换一位十六进制数为十进制,转换二进制为十六进制,位数不是四的倍数时补齐,每四位二进制数转换为一十六进制数,转换十进制为二进制,转换二进制为十进制等。
- 2022-01-25 23:55:04下载
- 积分:1