windows MFC
青青小禾
这个作者很懒,什么都没留下…
展开
-
S2010 怎么导入其他工程的对话框
直接编辑.rc的源代码,把对话框信息拷过来,然后把resource.h中相应的宏定义拷过来,再把对话框类加入新工程原创 2015-02-11 15:00:46 · 359 阅读 · 0 评论 -
如何利用CImage和AlphaBlend绘制PNG图片?
PNG图片本身就带有透明度,但是用CImage画出来的png却有白色背景,那么如何解决呢? 原因在于alpha的处理,CImage并没有做处理,而gdi+做过了处理,我们正是要做这样的处理,并不复杂反而简单。 #include void CrossImage(CImage &img) //对像素进行转换{ for(int i=0; i转载 2015-04-12 22:36:25 · 1900 阅读 · 0 评论 -
使用CImage 加载 PNG文件
//图片类class CImageEx : public CImage{public:CImageEx(){}~CImageEx(){}//加载图片bool LoadImage(HINSTANCE hInstance, LPCTSTR pszResourceName,LPCTSTR pszResourceType=TEXT("PNG"));bool原创 2015-04-12 22:50:02 · 1071 阅读 · 0 评论 -
调色板原理
逻辑调色板结构LOGPALETTE,该结构定义如下: typedef struct tagLOGPALETTE { WORD palVersion; //调色板的板本号,应该指定该值为0x300; WORD palNumEntries;//调色板中的表项数,对于灰度图像该值为256; PALETEENTRY palPalEntry[1];//调色板中的颜转载 2015-04-19 20:39:34 · 652 阅读 · 0 评论 -
点击对话框的任何位置都能拖动,模拟单机了鼠标左键
void CGoBangDlg::OnLButtonDown(UINT nFlags, CPoint point){//模拟鼠标点击在None-Client,非客户区 HTCAPTION 点击标题 //功能是:点击对话框的任何位置都能拖动窗口PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y))原创 2015-04-23 15:01:50 · 513 阅读 · 0 评论 -
InvalidateRect()与Invalidate()的用法
BOOL InvalidateRect( HWND hWnd, // 窗口句柄 CONST RECT* lpRect, // 矩形区域 BOOL bErase //是否擦除背景); InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效。InvalidateRect函数转载 2015-04-13 11:19:04 · 550 阅读 · 0 评论 -
InvalidateRect()与Invalidate()的用法(转)
BOOL InvalidateRect( HWND hWnd, // 窗口句柄 CONST RECT* lpRect, // 矩形区域 BOOL bErase //是否擦除背景); InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效。InvalidateRect函数转载 2015-04-13 19:20:16 · 667 阅读 · 1 评论 -
透明位图--SRCINVERT用法讲解
实现透明位图,有一个知识点必须要提前知道,那就是:注意对于图片来说,只有纯黑RGB(0,0,0)为0,其余即使是RGB(0,0,1)也是1如果一个单色位图向彩色位图转换,那么单色位图为1的部分(也就是白色部分),会转换为彩色位图的背景色,单色位图为0的部分(黑色部分),会转换为彩色位图的前景色。如果一个彩色位图向单色位图转换,那么彩色位图的背景色转换到单色位图中则为1(转载 2015-04-23 22:24:07 · 3564 阅读 · 1 评论 -
CImage类的介绍与使用
Visual C++的CBitmap类和静态图片控件的功能是比较弱的,它只能显示出在资源中的图标、位图、光标以及图元文件的内容,而不像VB中的Image控件可以显示出绝大多数的外部图像文件(BMP、GIF、JPEG等)。因此,想要在对话框或其他窗口中显示外部图像文件则只能借助于第三方提供的控件或代码。 现在,MFC和ATL共享的新类CImage为图像处理提供了许多相应的方法,这使得Visual C转载 2015-04-13 21:50:02 · 612 阅读 · 0 评论 -
CImage类 Load 图像
1 参数为路径LPCTSTR pszfilename HRESULT hresult1=m_image.Load("C:\hell.jpg"); if(E_FAIL==hresult1){MessageBox(_T(" m_image Load failed!"));return;}2 参数为路径IStream pszfile原创 2015-04-14 15:49:37 · 4259 阅读 · 0 评论 -
mfc对话框如何关闭自动调整大小功能
跳转到需要固定大小的对话框,将Border的属性从Reszing改为Dialog Frame就可以阻止dialog被人收到改变大小原创 2015-04-15 16:12:22 · 576 阅读 · 0 评论 -
Bitblt单色位图SetBkColor、SetTextColor作用
void CGameDIB::TransparentBlt(HDC hdcDest, int iDestX, int iDestY, int iDestWidth, int iDestHeight, HDC hdcSource, int iSourceX, int iSourceY, int iSourceWidth, int iSourceHeig转载 2015-04-24 09:38:24 · 759 阅读 · 0 评论 -
CImage 加载透明PNG图片
CImage m_img;void LoadImage();void SetAlphaBits();void CceshipngView::LoadImage(){//第1步 寻找资源HRSRC hrsrc_resource=::FindResource(NULL,MAKEINTRESOURCE(IDB_NARUTO),"PNG");if(原创 2015-04-15 15:37:07 · 982 阅读 · 0 评论 -
如何解决绘图过程中的闪烁
在VC中进行绘图过程处理时,如果图形刷新很快,经常出现图形闪烁的现象。利用先在内存绘制,然后拷贝到屏幕的办法可以消除屏幕闪烁,具体的方法是先在内存中创建一个与设备兼容的内存设备上下文,也就是开辟一快内存区来作为显示区域,然后在这个内存区进行绘制图形。在绘制完成后利用BitBlt函数把内存的图形直接拷贝到屏幕上即可。具体的代码实现为:(1)创建内存区域CDC* p转载 2015-04-21 11:50:12 · 3964 阅读 · 0 评论 -
BitBlt 画透明位图
CDC::BitBlt函数,应用在GDI的绘图中,有时候我们需要显示的位图有一部分是透明的,例如在棋类游戏中,棋盘图片和棋子图片融合的时候,棋子边缘应该是透明。 在图1中,棋盘和棋子图片融合在一起,需要设置棋子图片边缘的“品红色”为透明。 1、BitBlt函数说明: BOOL BitBlt( int x, int原创 2015-04-24 20:24:59 · 7164 阅读 · 1 评论 -
VC通过GDI创建裁剪区
就是说,比如窗口是640x480的,我创建一个(10,10)-(100,100)的裁剪区域,那么任何在该区域外的绘图都会被忽略掉。比如画一条(0,0)-(300,300)的直线,那么只会出现在自己定义的裁剪区域内,别的地方是不会绘制任何东西的。VC通过GDI怎样创建这样的裁剪区域呢? void CGView::OnDraw(CDC* pDC){CGDoc* pDoc转载 2015-05-01 16:28:00 · 703 阅读 · 0 评论 -
new,malloc,GlobalAlloc用法
一。关于内存 1、内存分配方式 内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但转载 2015-04-19 10:54:24 · 340 阅读 · 0 评论 -
从内存字节流到文件—GlobalAlloc,GlobalLock,LockResource等用法
图片可以作为程序的资源,有时候我们想把图片资源编译为程序的一部分,这样资源就可以避免直接不查看利用。或者直接使用资源的二进制字节。那么怎么做到呢?windows是这么做的:首先申请一块全局内存块,将资源字节流拷贝到申请的内存中,然后就可以对该内存操作(比如转换为一个windows可以用的图片资源),最后释放掉内存块。下面是用到的几个函数:GlobalAlloc 函数原型:转载 2015-04-19 10:22:24 · 731 阅读 · 0 评论 -
OninitDialog与OnCreate两个消息有何区别,分别在什么时候调用
WM_INITDIALOGThe WM_INITDIALOG message is sent to the dialog box procedure immediately before a dialog box is displayed.WM_CREATEThe WM_CREATE message is sent when an application requests that a原创 2015-04-18 10:23:56 · 3680 阅读 · 0 评论 -
AfxGetApp()->m_pMainWnd和AfxGetMainWnd() 的区别
在多线程程序中AfxGetApp()->m_pMainWnd 应用程序主线程的句柄,在一个多线程应用程序中是唯一的AfxGetMainWnd() 调用线程的句柄,暨当前语句所在线程的句柄,不唯一。 If AfxGetMainWnd is called from the application's primary thread, it return转载 2015-03-25 19:48:58 · 628 阅读 · 0 评论 -
各种类和视图之间相互调用的总结
各种类和视图之间相互调用的总结1) 在View中获得Doc指 针2) 在App中获得MainFrame指针3) 在View中获得MainFrame指针4) 获得View(已建立)指针5) 获得当前文档指针6) 获得状态栏与工具栏指针7) 获得状态栏与工具栏变量8) 在Mainframe获得菜单指针9) 在任何类中获得应用程序类转载 2015-03-25 19:50:17 · 350 阅读 · 0 评论 -
使用CBitmapButton类创建位图按钮
CBitmapButton是一个MFC内置的按钮类,提供图片按钮的功能,并且支持在不同状态下显示不同图片。其使用方法比较简单,比CButton更美观,比其它的第三方Button类更简洁,因此,制作位图按钮时经常需要用到它。 1、在资源编辑的时候选中按钮的 Owner draw 属性,不需要选择 Bitmap 属性. 按钮右键-->Styles-->Owner dr原创 2015-03-25 23:24:49 · 1399 阅读 · 0 评论 -
关于CBitmap,LoadBitmap 的使用
LoadBitmap1.Platform SDK 如果位图的ID定义为IDB_BITMAP1则 HBITMAP hBitmap=LoadBitmap(AfxGetInstanceHandle(),(LPSTR)IDB_BITMAP1); 如果位图的ID定义为"IDB_BITMAP1"则 HBITMAP hBitmap=LoadBitmap(AfxGetInstanceHan转载 2015-03-26 09:48:22 · 715 阅读 · 0 评论 -
MoveWindow与SetWindowPos的异同
MoveWindow和SetWindosPos的异同 1.原型BOOL MoveWindow( HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint ); BOOL SetWindowPos( HWND hWnd, HWND hWndInsertAft转载 2015-03-26 19:38:13 · 1984 阅读 · 0 评论 -
GetWindowRect和GetClientRect的区别详解
一:关于坐标 MFC中绘图时经常涉及到坐标计算,GetWindowRect和GetClientRect这两个函数,是获取逻辑坐标系中窗口或控件(其实也是窗口)大小和坐标的常用函数了,有什么不一样的?先说说什么叫逻辑坐标?讲到逻辑坐标,它相对的一个概念是设备坐标,是为了屏蔽掉不同设备属性差别而设置的抽象坐标系,说白了,就是独立于设备坐标的统一接口,程序员不需要去在具体的设备上进行绘转载 2015-03-26 20:03:43 · 469 阅读 · 0 评论 -
关于SetCapture() 和 ReleaseCapture()的用法
一般,只有鼠标在CWnd的客户区内,你才能接受到鼠标消息。调用SetCapture后,即使鼠标移动出客户区,你也可以接受到鼠标消息。不过系统中只能有一个程序调用SetCapture,所以你需要在不使用时调用ReleaseCapture释放。而GetCapture可以知道当前哪个窗口调用了SetCapture。 用来捕获鼠标消息,只有鼠标在CWnd的客户区内,你才能转载 2015-03-27 07:52:42 · 5801 阅读 · 0 评论 -
OnDraw与OnPaint的区别
先看MSDN 怎么说:CWnd::OnPaint afx_msg void OnPaint( );RemarksThe framework calls this member function when Windows or an application makes a request to repaint a portion of an application’s转载 2015-03-26 17:04:00 · 439 阅读 · 0 评论 -
解决窗口刷新闪烁
一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。转载 2015-03-26 19:23:35 · 421 阅读 · 0 评论 -
用鼠标拖动图片移动
拖动图片要响应3个鼠标消息OnLButtonDown,OnLButtonUp,OnMouseMove 左键按下时: 要判断是否在图像内部按下的,若是捕获图片 左键释放时: 释放图片鼠标移动时: 根据鼠标移动,实时重绘图片原创 2015-03-26 18:39:30 · 626 阅读 · 0 评论 -
(来自百度知道)c/c++ VC++ MFC 关于在Static 控件里面作图的问题 详见问题补充,希望能留下QQ,交流一下
在头文件定义了一个CStatic类的对象2.在Oncreate()函数里面3.在Onpaint()函数里面,在static控件里面画了一根直线但是有一种很奇怪的现象刚开始出现窗口的时候,那个直线不出现但是我在拉动窗口的边框,改变窗口大小的时候,直线会出现但是,更奇怪的现象就是最大化的时候,然后取消最大化的时转载 2015-03-27 19:49:42 · 681 阅读 · 0 评论 -
IsIconic()和OnPaint()函数 虽然没什么用 留个印象
void CSetAddressDlg::OnPaint() {if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client re转载 2015-03-30 23:05:37 · 596 阅读 · 0 评论 -
给对话框添加菜单 工具栏 状态栏简易方法
先建立一个基于Dialog 的程序,我给他起了个名字叫:DlgMenuToolbar。一、如何往基于Dialog的程序添加菜单[1.1] 先添加菜单(IDR_MENU1)资源,并加上需要的菜单项。[1.2] 编辑对话框资源IDD_DLGMENUTOOLBAR_DIALOG的属性,在属性对话框中选择IDR_MENU1即可。 [1.3] 假如您不希望在对话框属性中直转载 2015-03-23 17:05:50 · 472 阅读 · 0 评论 -
修改MFC单文档 标题栏
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){if( !CFrameWnd::PreCreateWindow(cs) )return FALSE;// TODO: 在此处通过修改// CREATESTRUCT cs 来修改窗口类或样式cs.lpszName =_T("切格瓦拉-让我们忠于理想,让我们面对现实");原创 2015-03-24 16:09:39 · 1029 阅读 · 0 评论 -
右键弹出菜单
CMenu menu;CMenu *pMenu;menu.LoadMenu(IDR_MENU1);pMenu=menu.GetSubMenu(1);// 将坐标值由客户坐标转换为屏幕坐标 ClientToScreen(&point); // 弹出右键菜单,菜单左侧与point.x坐标值对齐 pMenu->TrackPopupM原创 2015-03-24 19:00:51 · 408 阅读 · 0 评论 -
路径层 CDC::BeginPath,BeginPath
5. 路径层 CDC::BeginPath,BeginPath 如何在Device Context中建立了一个路径层: 1)即调用BeginPath() 2)再调用其他的GDI绘图函数参数一个区域,如Rectangle生成一个矩形区域 3)调用EndPath() 产生闭环的路径层(即一个绘图区域) pDC->BeginPath()转载 2015-05-01 16:17:55 · 1199 阅读 · 0 评论