VC点滴

1.图像变灰2008/6/27



COLORREF cr = ::GetPixel(hDC,i,j); 

int nR = GetRValue(cr); 

int nG = GetGValue(cr); 

int nB = GetBValue(cr); //int nPer= (nR+nG+nB)/3;  

//这两种方法,肉眼确实很难看的出差别



int nPer = nR*0.299 + nG*0.587 + nB*0.114 cr = RGB(nPer,nPer,nPer);

 ::SetPixel(hDC,i,j,cr);

 

2.窗口透明效果实现

 ::SetWindowLong(m_hWnd,GWL_EXSTYLE, ::GetWindowLong(m_hWnd,GWL_EXSTYLE)|WS_EX_LAYERED);

 int nAlpha  = 200;

 //调用User32.DLL中的函数  

HINSTANCE hInst = LoadLibrary(L"User32.DLL");  

if(hInst) 

 {   typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);   

MYFUNC fun = NULL;   

//取得SetLayeredWindowAttributes函数指针   

fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");   

if(fun)fun(m_hWnd,0,nAlpha  ,2);   

FreeLibrary(hInst);  }



3.在窗户区移动,移动整个窗口

A.WM_NCHITTEST

  LRESULT hit = ::DefWindowProc(m_hWnd, uMsg, wParam, lParam);

 

 CPoint pt(LOWORD(lParam),HIWORD(lParam));

  return rc.PtInRect(pt) ?  HTCAPTION:HTCLIENT ;

B.窗户区的LButtonDown

 SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));

 

4.CBitmapButton使用

	m_bmpBtn.m_ImageList.CreateFromImage(IDB_BITMAP1,16,1, CLR_NONE,IMAGE_BITMAP);  

 	DWORD style = BMPBTN_HOVER | BMPBTN_HOVER |BMPBTN_AUTO3D_SINGLE;   

 	m_bmpBtn.SetImages(0,1,2,3);

  	m_bmpBtn.SetToolTipText ( L"Test Button" );  

  	 m_bmpBtn.Create(m_hWnd,CRect(0,0,100,100),NULL);  

    //m_bmpBtn.SubclassWindow(GetDlgItem(IDC_BUTTON1));  

     m_bmpBtn.SetBitmapButtonExtendedStyle(style);

     

5.修改Dialog的ClassName

 在dlg.create(NULL)前加入以下部分

1.注册类名

WNDCLASS wc = {0}; 

 if(!GetClassInfo(NULL,WC_DIALOG,&wc))

 {   

   	ATLASSERT(L"Failed GetClass/n"); 

 }

 wc.lpszClassName = L"AniMa"; 

 

  if(!RegisterClass(&wc))

{ 

  ATLASSERT(L"Failed RegisterClass/n"); 

 }

 

 if(dlgMain.Create(NULL) == NULL) 

 {  

  ATLTRACE(_T("Main dialog creation failed!/n"));   

  return 0; 

 }

2.修改rc资源

    在.rc里的CAPTION "AniMationA1"下面加入 CLASS "AniMa"

 

 6.向剪贴板写

 	CString str = L"我们aa";

	if(!OpenClipboard())

	{

		ATLTRACE("OpenClipboard Failed/n");

		CloseClipboard();

		return 0;

	}

	EmptyClipboard();

	int size = (lstrlen(str)+1)*sizeof(TCHAR);

	HGLOBAL bufCB = GlobalAlloc(GPTR,size);

	//::ZeroMemory(bufCB,size);

	LPTSTR lpStr =(LPTSTR)GlobalLock(bufCB);

	lstrcpy(lpStr,str);

	SetClipboardData(CF_UNICODETEXT,bufCB);

	GlobalUnlock(bufCB);

	CloseClipboard();

	   

 7.从剪贴板读数据   

 	CString str ;

	if(!OpenClipboard())

	{

		ATLTRACE(L"OpenClipboard Failed/n");

		CloseClipboard();

		return 0;

	}

	HGLOBAL bufCB =GetClipboardData(CF_UNICODETEXT);

	LPTSTR lpStr =(LPTSTR)GlobalLock(bufCB);

	str = lpStr;

	GlobalUnlock(bufCB);

	CloseClipboard();
     注意点:unicode的内容要用CF_UNICODETEXT,ASCII则用CF_TEXT
8.如何在Release状态下进行调试
Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,
Optimizations选Disable(Debug),Debut info选Program Database。在Link标签中选中
Generate debug info复选框。 注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,
函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值