VCer代码 VCer开源 VCer文章 VCer工具 VCer知道 VCer词典 VCer读书 VCer论坛   站点首页 我要张贴 控制面板
VCer代码 VCer开源 VCer文章 VCer工具 VCer知道 VCer词典 VCer读书 VCer论坛   站点首页 我要张贴 控制面板

目前位置: VCer资源中心 >>> VCer代码 >>> Windows界面
我也来贴上一段经典代码吧!>>>


绘制桌面精灵
 
如此临时创建的区域,由于计算需要很多的时间,所以使得有点闪烁。改进的方法有: 1、利用屏蔽位图进行处理,可以加快时间 2、如果精灵动作不是特别多,图片不是特别大的情况下,直接将所有创建的区域保存下来,不用每次都来创建和删除,这样将快很多,但是也消耗更多的内存。// 关键在于如何创建一个随意形状的窗口 准备一张带有透明色背景(就是背景都是一个颜色,呵呵)的bmp图片 创建与位图兼容的dc。然后创建一个空区域 hr=CreateRectRgn(0,0,0,0); for (i=0;i < 图片宽度-2;i++) { for(j = 0;j< 图片高度-2;j++) { 用dc得到图片i,j处的象素pixel if( pexel !=透明色) { temp=CreateRectRgn(i,j,i+1,j+1); CombineRgn(hr,hr,temp,RGN_OR); DeleteObject(temp); } // 最后用SetWindowRgn函数将窗口形状设置成上面创建的区域的形状 SetWindowRgn(handle,hr,true); DeleteObject(hr); ps:如果有与位图相对应的屏蔽位图,用他们进行光栅 ...
作者:不祥 ISeekYou张贴于2004-05-13 14:55:04.0,共阅读2172次,回复2
全屏显示视图的代码
 
开启全屏显示的代码: void CViewerFrame::FullScreenShow() { GetWindowPlacement(&m_OldWndPlacement); CRect WindowRect; GetWindowRect(&WindowRect); CRect ClientRect; RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&ClientRect); ClientToScreen(&ClientRect); int nFullWidth=GetSystemMetrics(SM_CXSCREEN); int nFullHeight=GetSystemMetrics(SM_CYSCREEN); m_FullScreenRect.left=WindowRect.left-ClientRect.left-1; m_FullScreenRect.top=WindowRect.top-ClientRect.top-1; m_FullScreenRect.right=WindowRect.right-ClientRect.right+nFullWidth+2; m_FullScreenRect.bottom=WindowRect.bottom-Clie ...
作者:不祥 bluejoe张贴于2004-04-24 21:26:56.0,共阅读2334次,回复3
CListCtrl与CListView相关代码
 
选择项的问题 双击响应函数里的参数有一个是NM_LISTVIEW * msdn查NMLISTVIEW(把中间那个_去掉)能看到这个结构中有一个成员变量是iItem 0表示第一行,1表示第二行;还有一个iSubItem表示列,0表示双击在第一列 CListCtrl大小图标转换 先要添加控制按纽(大图标,小图标,列表,详细) void OnBig() { LONG lStyle; lStyle = GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//获取当前窗口句并 lStyle&=~ LVS_TYPEMASK;//清除显示方式所在的比特为 lStyle |= LVS_ICON;//设置显示方式 SetWindowLong(m_listCtrl.m_hWnd, GWL_STYLE,lStyle);//设置窗口类型 ...
作者:不祥 jerry张贴于2004-03-10 18:19:36.0,共阅读3896次,回复1
【转】设置窗口的透明度
 
... 设置窗口的透明度(win2000以上) ----------------------------------- 第一步 定义功能 typedef BOOL (FAR PASCAL * FUNC1)( HWND hwnd, // handle to the layered window COLORREF crKey, // specifies the color key BYTE bAlpha, // value for the blend function DWORD dwFlags // action ); 第二步 实现代码 在OnInitDialog中加入下列代码(如果在SDI里面,应该是在OnCreat里面添加) ..... HMODULE hModule = GetModuleHandle("user32.dll"); FUNC1 SetLayeredWindowAttributes; SetLayeredWindowAttributes = (FUNC1) GetProcAddress (hModule, _T( "SetLayeredWindowAttributes" ) ); // 设置分层扩展标记 SetWindowLong(GetSafeHwnd(), ...
作者:ohahay ohahay张贴于2007-12-28 19:19:31.0,共阅读441次,回复0
如何得到系统帮助手型鼠标形状
 
HCURSOR LoadHelpCursor() { CString strWndDir; GetWindowsDirectory(strWndDir.GetBuffer(MAX_PATH), MAX_PATH); strWndDir.ReleaseBuffer(); strWndDir += _T("\\winhlp32.exe"); HMODULE hModule = LoadLibrary(strWndDir); HCURSOR hCursor=NULL; if (hModule) { hCursor = ::LoadCursor(hModule, MAKEINTRESOURCE(106)); FreeLibrary(hModule); } return hCursor; }
作者:不祥 xler张贴于2004-05-11 15:04:02.0,共阅读1911次,回复2
URL链接的显示--CHyperLink
 
Copyright Chris Maunder, 1997 用以显示可点击的URL链接,使用方法如下: CHyperLink m_Url; //static控件映射变量 m_Url.SetURL(""); m_Url.SetCursor(::theApp.LoadStandardCursor (IDC_HAND)); m_Url.SetToolTip(_T("访问VCer.net网站"));头文件: // HyperLink.h : header file // // // HyperLink static control. Will open the default browser with the given URL // when the user clicks on the link. // // Copyright Chris Maunder, 1997 // Feel free to use and distribute. #if !defined(AFX_HYPERLINK_H__D1625061_574B_11D1_ABBA_00A0243D1382__INCLUDED_) #define AFX_HYPERLINK_H__D1625061_574B_11D1_ABBA_00A0243D1382__INCLUDED_ #if ...
作者:Chris Maunder bluejoe张贴于2007-01-17 17:16:23.0,共阅读2086次,回复1
如何在对话框中加入状态栏[2]加强你的状态栏
 
1.修改状态栏背景色 OnInitDialog 里面加 m_bar.GetStatusBarCtrl().SetBkColor(RGB(180,180,180)); 2.时间显示 OnInitDialog 里面加 SetTimer(100,1000,NULL); WM_TIMER 里面 if(nIDEvent==100) { CTime t1; t1=CTime::GetCurrentTime(); m_bar.SetPaneText(1,t1.Format("%H:%M:%S")); } CDialog::OnTimer(nIDEvent); 3.显示鼠标坐标 void CDlgStatusBarDlg::OnMouseMove(UINT nFlags, CPoint point) { CString s; s.Format("X=%d Y=%d",point.x,point.y); m_bar.SetPaneText(0,s); CDialog::OnMouseMove(nFlags, point); } 要看前面一片文章哦
作者:不祥 Bccv张贴于2004-04-20 11:54:48.0,共阅读2459次,回复1
CListCtrl的item checked 或unchecked时的消息响应
 
void CListDlg::OnItemchangedlist(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; *pResult = 0; if (pNMListView->uOldState == 0 && pNMListView->uNewState == 0) return; // No change BOOL bPrevState = (BOOL)(((pNMListView->uOldState & LVIS_STATEIMAGEMASK)>>12)-1); // Old check box state if (bPrevState < 0) // On startup there's no previous state bPrevState = 0; // so assign as false (unchecked) // New check box state BOOL bChecked=(BOOL)(((pNMListView->uNewState & LVIS_STATEIMAGEMASK)>>12)-1); if (bChecked < 0) // On n ...
作者:不祥 jerry张贴于2004-05-27 16:41:30.0,共阅读2512次,回复0
给IE窗口的Input框右键菜单加入新的功能
 
部分内容需要参考上面的,为Edit框右键菜单添加新项 和设置Edit窗口一样,也需要设置一个窗口过程钩子来截获WM_CONTEXTMENU消息,不过设置的窗口过程有所不同。新的窗口过程如下: LRESULT CALLBACK IEWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { HOOKSHARED *hkShared; HANDLE hMapObject; WNDPROC oldWndProc = (WNDPROC)::GetProp(hWnd, ADPISA_oldProc); hkShared = HooKGetSharedMem(&hMapObject); if( uMsg == hkShared->uIEDoPaste ) { POINT pt; pt.y = HIWORD( lParam ); pt.x = LOWORD( lParam ); IEDoPaste(hWnd,pt); } HooKReleaseSharedMem(hkShared,hMapObject); switch(uMsg) { case WM_CONTEXTMENU: { // 在右键弹出时,判断是否为Input框,主要函数GetD ...
作者:不祥 ISeekYou张贴于2004-05-21 21:46:37.0,共阅读2168次,回复0
给Edit编辑窗口的右键菜单加入新的功能
 
代码内容来自于曾经做过的一个个人电脑安全安全处理助理软件,其中有项功能,就是给正在编辑的窗口内容加密,加密的功能放在右键菜单中调用,呵呵。里面有些用到的结构函数并没有列出来,代码只能大致给出思路首先需要安装一个窗口过程钩子 g_hPROCHook=SetWindowsHookEx(WH_CALLWNDPROC, GetMsgProc, g_hinstDll, 0); 窗口过程主要是在截获到 WM_CONTEXTMENU 消息时,判断当前窗口是否为Edit框, 若是的话,保存原窗口过程,设置新的窗口过程为NormalWndProc。 LRESULT WINAPI GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam) { CWPSTRUCT* pStruct = (CWPSTRUCT*)lParam; HOOKSHARED *hkShared; HHOOK hProcHook; HANDLE hMapObject; hkShared=HooKGetSharedMem(&hMapObject); hProcHook=hkShared->g_hPROCHook; if (nCode == HC_ACTION) { if (pStruct->message != WM_CONT ...
作者:不祥 ISeekYou张贴于2004-05-21 21:24:50.0,共阅读2099次,回复0
实现Dialog的Menu中最近使用文件机制
 
l 如何启动Dialog的Command Update机制? 重载Cdialog的WM_INITMENUPOPUP, 修改使用 void CFrameWnd::OnInitMenuPopup (CMenu* pMenu, UINT, BOOL bSysMenu) 中的source code,启动Command Update机制 l 如何实现Dialog的Menu中最近使用文件机制? 最近使用文件机制是用CWinApp的Command Update机制和以下两个消息处理的: ON_UPDATE_COMMAND_UI(ID_FILE_MRU_FILE1, OnUpdateRecentFileMenu) ON_COMMAND_EX_RANGE(ID_FILE_MRU_FILE1,ID_FILE_MRU_FILE16, OnOpenRecentFile) void CWinApp::OnUpdateRecentFileMenu(CCmdUI* pCmdUI) { ASSERT_VALID(this); if (m_pRecentFileList == NULL) // no MRU files pCmdUI->Enable(FALSE); ...
作者:不祥 jerry张贴于2004-05-11 20:37:18.0,共阅读2015次,回复0
如何实现双击程序托盘图标弹出或者弹入动画效果
 
使用API: BOOL WINAPI DrawAnimatedRects(HWND hwnd, int idAni, CONST RECT * lprcFrom, CONST RECT * lprcTo); Eg: Bool m_bShow = false; //区分弹出还是弹入 BOOL WinAnimation() { CWnd * pWnd=FindWindow("Shell_TrayWnd",NULL); //windows底部信息提示窗口 if(!pWnd)return FALSE; CRect rectSur,rectDst; GetWindowRect(&rectSur); //本窗口大小,用户自己处理 EnumChildWindows(pWnd->GetSafeHwnd(),My_Find,(LPARAM)&rectDst); //寻找托盘 if(m_bShow)DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,&rectSur,&rectDst); //弹入 else DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,&rectDst,&rectSur); //弹出 re ...
作者:不祥 xler张贴于2004-05-11 14:47:50.0,共阅读1936次,回复0
分割“品”字型的视图
 
BOOL CBrowserFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { m_Splitter1.CreateStatic(this,1,2); m_Splitter2.CreateStatic(&m_Splitter1,2,1,WS_CHILD|WS_VISIBLE,m_Splitter1.IdFromRowCol(0,1)); m_Splitter1.CreateView(0,0,RUNTIME_CLASS(CBrowserFolder),CSize(200,0),pContext); m_Splitter2.CreateView(0,0,RUNTIME_CLASS(CLogoBar),CSize(0,80),pContext); m_Splitter2.CreateView(1,0,RUNTIME_CLASS(CBrowserList),CSize(0,0),pContext); return CFrameWnd::OnCreateClient(lpcs,pContext); }
作者:不祥 bluejoe张贴于2004-04-30 10:16:05.0,共阅读1527次,回复0
如何在对话框中加入状态栏[1]
 
1.ID_INDICATOR_NISH and ID_INDICATOR_TIME这个两个加到 symbol 里去,同样的加到 string table 里去 2.在你的 Dialog 类里面加个 CStatusBar m_bar; 3.在实现文件开头加上 static UINT BASED_CODE indicators[] = { ID_INDICATOR_NISH, ID_INDICATOR_TIME }; 4.OnInitDialog 里面加上 m_bar.Create(this); //We create the status bar m_bar.SetIndicators(indicators,2); //Set the number of panes CRect rect; GetClientRect(&rect); //Size the two panes m_bar.SetPaneInfo(0,ID_INDICATOR_NISH, SBPS_NORMAL,rect.Width()-100); m_bar.SetPaneInfo(1,ID_INDICATOR_TIME,SBPS_STRETCH ,0); //This is where we actually draw ...
作者:不祥 Bccv张贴于2004-04-20 11:46:50.0,共阅读1886次,回复0
在工具条中加入组合框控件
 
昨天在 smth 有人问,说下.大家多指教 首先打开VC的工具条资源编辑器,如图一所示,在要加入组合框的地方加一个空按纽,如图一所示的第四个按纽,分配一个ID号,在本文的实例中为IDC_COMBOX。 工具条应该封装为一个类,组合框控件应该作为这个类的一个成员变量。生成一个以CToolBar为基类的的新类CComboToolBar,这可以用VC的类向导(ClassWizard)来实现,先生成一个以CToolBarCtrl为基类的新类CComboToolBar,然后在文件编辑器中打开ComboToolBar.h和ComboToolBar.cpp文件,把CComboToolBar基类改为CToolBar。新类生成后,加入成员变量CComboBox m_combobox。 然后把CMainFrame类中的工具条成员变量m_wndToolBar的类型由CToolBar改为CComboToolBar。编辑应用程序向导已经生成好的函数int CMainFrame::OnCreate (LPCREATESTRUCT lpCreateStruct),这个函数通常用来产生工具条和状态条,在创建工具条的函数后加入以下代码: CRect rect; //设置组合框的宽度,四个参数依次为控件在工具条中的索引号、ID号、风格、宽度 m_wndToolBar.SetButtonInfo ...
作者:不祥 Bccv张贴于2004-04-16 09:10:08.0,共阅读2013次,回复1
如何改变控件的字体 (老问题,好解决)
 
由于控件是也是窗口,用户可以调用CWnd: : SetFont指定新字体。 //Declare font object in class declaration (.H file ). private : Cfont m_font ; // Set font in class implementation (.Cpp file ). Note m_wndButton is a //member variable added by ClassWizard.DDX routines hook the member //variable to a dialog button contrlo. BOOL CSampleDialog : : OnInitDialog ( ) &iexcl;&shy; //Create an 8-point Arial font m_font . CreateFont (MulDiv (8 , -pDC-> GetDeviceCaps (LOGPIXELSY) , 72). 0 , 0 , 0 , FW_NORMAL , 0 , 0, 0, ANSI_CHARSER, OUT_STROKE_PRECIS , CLIP_STROKE _PRECIS , DRA ...
作者:不祥 Bccv张贴于2004-04-16 09:00:25.0,共阅读1978次,回复1
也贴一个显示选择目录文件夹的片断
 
和 bluejoe 一样的差不多..BROWSEINFO browseInfo; browseInfo.hwndOwner = this->m_hWnd; // set root at Desktop browseInfo.pidlRoot = NULL; browseInfo.pszDisplayName = "hehe"; browseInfo.lpszTitle = "Paht"; browseInfo.ulFlags = BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS; browseInfo.lpfn = NULL; browseInfo.lParam = 0; LPITEMIDLIST lpItemIDList; if ((lpItemIDList = ::SHBrowseForFolder(&browseInfo)) != NULL) { // Get the path of the selected folder from the item ID list. if (::SHGetPathFromIDList(lpItemIDList, szBuffer)) { // At this point, szBuffer contains the path the user chose. ...
作者:不祥 Bccv张贴于2004-04-16 08:38:18.0,共阅读1536次,回复0
发送一个关于某个按钮单击的消息
 
GetDlgItem(IDOK)->PostMessage(BM_CLICK,0,0); 或 PostMessage(WM_COMMAND,IDOK|BN_CLICKED<<16,GetDlgItem(IDOK)->m_hWnd);
作者:不祥 jerry张贴于2004-03-10 21:08:28.0,共阅读1441次,回复0
多行文本输出
 
int CUtil::MultiLineTextOut( CDC * pDC, int x, int y, CString Text, int LineSpace) { TEXTMETRIC Metric; if (pDC->GetOutputTextMetrics(& Metric)) { LineSpace += Metric.tmHeight; } int Lines = 0; int Length = Text.GetLength(); int Start = 0; for (int i = 0; i < Length; i++) { if (Text.GetAt(i) == '\n') { Lines++; pDC->TextOut(x, y, Text.Mid(Start, i - Start)); y += LineSpace; Start = i + 1; } } pDC->TextOut(x, y, Text.Mid(Start, i - Start)); return Lines; }
作者:不祥 bluejoe张贴于2004-03-10 14:51:56.0,共阅读1619次,回复0
显示目录选择对话框
 
//显示选择文件夹窗口 //参数 sFolderPath:用于返回用户选择的文件夹的路径 //参数 sTitle:用于指定选择文件夹窗口的标题 //返回值 :操作结果,用户取消选择或操作失败返回FALSE,否则TRUE BOOL CShell::BrowseForFolder(CString & sFolderPath, CString sTitle) { BROWSEINFO bi; char Buffer[_MAX_PATH]; bi.hwndOwner = NULL; bi.pidlRoot = NULL; bi.pszDisplayName = Buffer; bi.lpszTitle = sTitle; bi.ulFlags = 0; bi.lpfn = NULL; LPITEMIDLIST pIDList = SHBrowseForFolder(& bi); if (!pIDList) return FALSE; SHGetPathFromIDList(pIDList, Buffer); sFolderPath = Buffer; LPMALLOC lpMalloc; if (FAILED(SHGetMalloc(& lpMalloc))) return FALSE; //释放内 ...
作者:不祥 bluejoe张贴于2004-03-10 14:50:18.0,共阅读1771次,回复0