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版一样。