«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

本站技术贴除标明为“原创”的之外,其余均为网上转载,文中我会尽量保留原作者姓名,若有侵权请与我联系,我将第一时间做出修改。谢谢!

             ——既瑜


天气预报(南京)


我的分类(专题)

首页(183)
【趣味文摘】(22)
【五子连珠】(13)
【技术文档】(136)
【电脑技术】(6)
【疑难问题】(1)
【我的心情】(5)


最新日志
花语(中英文对照版)
各种花的花语
NTFS格式的7个精彩问答(pconli
童言无忌,有趣得一蹋
给MM修电脑的三个步骤[转载]
J2EE 面试题综合
JAVA编程规则
[转] P2P之UDP穿透NAT的原理与
[转]词法分析器
文件加密技术
一个让人发狂的PI求解C程序
[转]直线生成算法之DDA
[转]利用内核对象----互斥量实现应用
[转]如何正确的计算文件收发进度
双机调试VC程序
[转]分治法优化大整数乘法 C++实现
浮点数值的内存结构
[转]双链表实现大整数的加法与乘法[VC
拜占廷将军问题[转]
某人的挂QQ的程序源代码,虽然没用了,拿

最新回复
回复:vc中的CString的操作
回复:[转]分治法优化大整数乘法 C++
回复:[转]分治法优化大整数乘法 C++
回复:花语(中英文对照版)
回复:基本排序算法比较与选择[转载]
回复:c++中强制类型转换操作符小结
回复:c++中强制类型转换操作符小结
何必那么执着于是大头猫还是愤怒的小鸟,淡
回复:浮点数值的内存结构
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:32位位图到24位位图的转换
dren, ages 16 and 20
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:各种花的花语

留言板
签写新留言

不是0-1背包喔
桂花的花语``
谢谢
提议
提议

统计
blog名称:★既瑜★
日志总数:183
评论数量:636
留言数量:-25
访问次数:1405959
建立时间:2005年3月12日

链接


http://www.nju.edu.cn
http://bbs.nju.edu.cn 
http://www.t7-online.com
http://www.csdn.net
http://www.91f.net
http://www.crsky.com
我的MSN BLOG 

联系我

  OICQ:215768265
  njucs2001@hotmail.com
  erichoo1982@gmail.com

 

W3CHINA Blog首页    管理页面    写新日志    退出


[【技术文档】]VC中的一些常用方法(20条)
既瑜(224499) 发表于 2005/3/19 11:02:56

VC中的一些常用方法 //一、打开CD-ROM mciSendString("Set cdAudio door open wait",NULL,0,NULL); //二、关闭CD_ROM mciSendString("Set cdAudio door closed wait",NULL,0,NULL); //三、关闭计算机 OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);GetVersionEx(&OsVersionInfo); //获取操作系统版本信息if(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS){    //Windows98,调用ExitWindowsEx()函数重新启动计算机    DWORD dwReserved;    ExitWindowsEx(EWX_REBOOT,dwReserved); //可以改变第一个参数,实现注销用户、    //关机、关闭电源等操作    // 退出前的一些处理程序} //四、重启计算机 typedef int (CALLBACK *SHUTDOWNDLG)(int); //显示关机对话框函数的指针HINSTANCE hInst = LoadLibrary("shell32.dll"); //装入shell32.dllSHUTDOWNDLG ShutDownDialog; //指向shell32.dll库中显示关机对话框函数的指针if(hInst != NULL){    //获得函数的地址并调用之    ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);        (*ShutDownDialog)(0);} //五、枚举所有字体 LOGFONT lf;lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structurestrcpy(lf.lfFaceName,"");CClientDC dc (this);// Enumerate the font families::EnumFontFamiliesEx((HDC) dc,&lf, (FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);//枚举函数int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,                             LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)                             {    // Create a pointer to the dialog window    CDay7Dlg* pWnd = (CDay7Dlg*) lparam;    // add the font name to the list box    pWnd ->m_ctlFontList.AddString(lpelf ->elfLogFont.lfFaceName);    // Return 1 to continue font enumeration    return 1;} //其中m_ctlFontList是一个列表控件变量 //六、一次只运行一个程序实例,如果已运行则退出 if( FindWindow(NULL,"程序标题")) exit(0); //七、得到当前鼠标所在位置 CPoint pt;GetCursorPos(&pt); //得到位置 //八、上下文菜单事件触发事件:OnContextMenu事件 //九、显示和隐藏程序菜单 CWnd *pWnd=AfxGetMainWnd();if(b_m) //隐藏菜单{    pWnd->SetMenu(NULL);    pWnd->DrawMenuBar();    b_m=false;}else{    CMenu menu;    menu.LoadMenu(IDR_MAINFRAME); ////显示菜单 也可改变菜单项    pWnd->SetMenu(&menu);    pWnd->DrawMenuBar();    b_m=true;    menu.Detach();} //十、获取可执行文件的图标 HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);if (hIcon &&hIcon!=(HICON)-1){    pDC->DrawIcon(10,10,hIcon);    }DestroyIcon(hIcon); //十一、窗口自动靠边程序演示 BOOL AdjustPos(CRect* lpRect){//自动靠边    int iSX=GetSystemMetrics(SM_CXFULLSCREEN);    int iSY=GetSystemMetrics(SM_CYFULLSCREEN);    RECT rWorkArea;    BOOL bResult = SystemParametersInfo(SPI_GETWORKAREA, sizeof(RECT), &rWorkAre        a, 0);    CRect rcWA;    if(!bResult)    {//如果调用不成功就利用GetSystemMetrics获取屏幕面积        rcWA=CRect(0,0,iSX,iSY);    }    else        rcWA=rWorkArea;    int iX=lpRect->left;    int iY=lpRect->top;        if(iX < rcWA.left + DETASTEP && iX!=rcWA.left)    {//调整左        //pWnd->SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE);        lpRect->OffsetRect(rcWA.left-iX,0);        AdjustPos(lpRect);        return TRUE;    }    if(iY < rcWA.top + DETASTEP && iY!=rcWA.top)    {//调整上        //pWnd->SetWindowPos(NULL ,iX,rcWA.top,0,0,SWP_NOSIZE);        lpRect->OffsetRect(0,rcWA.top-iY);        AdjustPos(lpRect);        return TRUE;    }    if(iX + lpRect->Width() > rcWA.right - DETASTEP && iX !=rcWA.right-lpRect->Width())    {//调整右        //pWnd->SetWindowPos(NULL ,rcWA.right-rcW.Width(),iY,0,0,SWP_NOSIZE);        lpRect->OffsetRect(rcWA.right-lpRect->right,0);        AdjustPos(lpRect);        return TRUE;    }    if(iY + lpRect->Height() > rcWA.bottom - DETASTEP && iY !=rcWA.bottom-lpRect        ->Height())    {//调整下        //pWnd->SetWindowPos(NULL ,iX,rcWA.bottom-rcW.Height(),0,0,SWP_NOSIZE);        lpRect->OffsetRect(0,rcWA.bottom-lpRect->bottom);        return TRUE;    }    return FALSE;}//然后在ONMOVEING事件中使用所下过程调用 CRect r=*pRect;AdjustPos(&r);*pRect=(RECT)r; //十二、给系统菜单添加一个菜单项给系统菜单添加一个菜单项需要进行下述三个步骤://首先,使用Resource Symbols对话(在View菜单中选择Resource Symbols...可以显//示该对话)定义菜单项ID,该ID应大于0x0F而小于0xF000;//其次,调用CWnd::GetSystemMenu获取系统菜单的指针并调用CWnd:: Appendmenu将菜单//项添加到菜单中。下例给系统菜单添加两个新的 int CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct){    //…    //Make sure system menu item is in the right range.    ASSERT(IDM_MYSYSITEM<0xF000);    //Get pointer to system menu.    CMenu* pSysMenu=GetSystemMenu(FALSE);    ASSERT_VALID(pSysMenu);    //Add a separator and our menu item to system menu.    CString StrMenuItem(_T ("New menu item"));    pSysMenu->AppendMenu(MF_SEPARATOR);    pSysMenu->AppendMenu(MF_STRING, IDM_MYSYSITEM, StrMenuItem);    //…} //十三、运行其它程序 //1、运行EMAIL或网址 char szMailAddress[80];strcpy(szMailAddress,"mailto:netvc@21cn.com");ShellExecute(NULL, "open", szMailAddress, NULL, NULL, SW_SHOWNORMAL); //2、运行可执行程序WinExec("notepad.exe",SW_SHOW); //运行计事本 //十四、动态增加或删除菜单 //1、 增加菜单//添加CMenu *mainmenu;mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单(mainmenu->GetSubMenu (0))->AppendMenu (MF_SEPARATOR);//添加分隔符(mainmenu->GetSubMenu (0))->AppendMenu(MF_STRING,ID_APP_ABOUT,                                        _T("Always on &Top")); //添加新的菜单项                                        DrawMenuBar(); //重画菜单//2、 删除菜单//删除CMenu *mainmenu;mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单 CString str ;for(int i=(mainmenu->GetSubMenu (0))->GetMenuItemCount()-1;i>=0;i--) //取得菜单的项数。{    (mainmenu->GetSubMenu (0))->GetMenuString(i,str,MF_BYPOSITION);    //将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION的解释见上。    if(str=="Always on &Top") //如果是刚才我们增加的菜单项,则删除。    {        (mainmenu->GetSubMenu (0))->DeleteMenu(i,MF_BYPOSITION);        break;    }} //十五、改变应用程序的图标静态更改: //修改图标资源IDR_MAINFRAME。它有两个图标,一个是16*16的,另一个是32*32的,注意要一起修改。 //动态更改: 向主窗口发送WM_SETICON消息.代码如下:HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICON);ASSERT(hIcon);AfxGetMainWnd()->SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon); //十六、另一种改变窗口标题的方法 //使用语句 CWnd* m_pCWnd = AfxGetMainWnd( ),然后,再以如下形式调用SetWindowText()函数:SetWindowText( *m_pCWnd,(LPCTSTR)m_WindowText);// m_WindowText可以是一个CString类的变量。 //十七、剪切板上通过增强元文件拷贝图像数据下面代码拷贝通过元文件拷贝图像数据到任何应用程序,//其可以放置在CView派生类的函数中。 CMetaFileDC * m_pMetaDC = new CMetaFileDC();m_pMetaDC->CreateEnhanced(GetDC(),NULL,NULL,"whatever");//draw meta file//do what ever you want to do: bitmaps, lines, text...//close meta file dc and prepare for clipboard;HENHMETAFILE hMF = m_pMetaDC->CloseEnhanced();//copy to clipboardOpenClipboard();EmptyClipboard();::SetClipboardData(CF_ENHMETAFILE,hMF);                                                                                CloseClipboard(); //DeleteMetaFile(hMF);delete m_pMetaDC; //十八、剪切板上文本数据的传送把文本放置到剪接板上: CString source;//put your text in sourceif(OpenClipboard()){    HGLOBAL clipbuffer;    char * buffer;    EmptyClipboard();    clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.GetLength()+1);    buffer = (char*)GlobalLock(clipbuffer);    strcpy(buffer, LPCSTR(source));    GlobalUnlock(clipbuffer);    SetClipboardData(CF_TEXT,clipbuffer);    CloseClipboard();} //从剪接板上获取文本: char * buffer;if(OpenClipboard()){    buffer = (char*)GetClipboardData(CF_TEXT);    //do something with buffer here    //before it goes out of scope}CloseClipboard(); //十九、将捕捉屏幕图像到剪切版中 void CShowBmpInDlgDlg::OnCutScreen(){    ShowWindow(SW_HIDE);    RECT r_bmp={0,0,::GetSystemMetrics(SM_CXSCREEN),        ::GetSystemMetrics(SM_CYSCREEN)};                                                                                          HBITMAP hBitmap;    hBitmap=CopyScreenToBitmap(&r_bmp);        //hWnd为程序窗口句柄    if (OpenClipboard())    {        EmptyClipboard();        SetClipboardData(CF_BITMAP, hBitmap);        CloseClipboard();    }    ShowWindow(SW_SHOW);}HBITMAP CShowBmpInDlgDlg::CopyScreenToBitmap(LPRECT lpRect){    //lpRect 代表选定区域    {        HDC hScrDC, hMemDC;        // 屏幕和内存设备描述表        HBITMAP hBitmap, hOldBitmap;        // 位图句柄        int nX, nY, nX2, nY2;        // 选定区域坐标        int nWidth, nHeight;        // 位图宽度和高度        int xScrn, yScrn;        // 屏幕分辨率                // 确保选定区域不为空矩形        if (IsRectEmpty(lpRect))            return NULL;        //为屏幕创建设备描述表        hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);        //为屏幕设备描述表创建兼容的内存设备描述表        hMemDC = CreateCompatibleDC(hScrDC);        // 获得选定区域坐标        nX = lpRect->left;        nY = lpRect->top;        nX2 = lpRect->right;        nY2 = lpRect->bottom;        // 获得屏幕分辨率        xScrn = GetDeviceCaps(hScrDC, HORZRES);        yScrn = GetDeviceCaps(hScrDC, VERTRES);        //确保选定区域是可见的        if (nX<0)                        nX = 0;        if (nY<0)            nY = 0;        if (nX2>xScrn)            nX2 = xScrn;        if (nY2>yScrn)            nY2 = yScrn;        nWidth = nX2 - nX;        nHeight = nY2 - nY;        // 创建一个与屏幕设备描述表兼容的位图        hBitmap = CreateCompatibleBitmap            (hScrDC, nWidth, nHeight);        // 把新位图选到内存设备描述表中        hOldBitmap =(HBITMAP)SelectObject(hMemDC, hBitmap);        // 把屏幕设备描述表拷贝到内存设备描述表中        BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY);        //得到屏幕位图的句柄        hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);                //清除        DeleteDC(hScrDC);        DeleteDC(hMemDC);        // 返回位图句柄        return hBitmap;    }} //二十、如何将位图缩放显示在Static控件中 //在Staic控件内显示位图void CShowBmpInDlgDlg::ShowBmpInStaic(){    CBitmap hbmp;    HBITMAP hbitmap;    //将pStatic指向要显示的地方    CStatic *pStaic;    pStaic=(CStatic*)GetDlgItem(IDC_IMAGE);    //装载资源 MM.bmp是我的一个文件名,用你的替换    hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),"MM.bmp",        IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);        hbmp.Attach(hbitmap);    //获取图片格式    BITMAP bm;    hbmp.GetBitmap(&bm);    CDC dcMem;    dcMem.CreateCompatibleDC(GetDC());    CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp);    CRect lRect;    pStaic->GetClientRect(&lRect);    //显示位图    pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(),        &dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);    dcMem.SelectObject(&poldBitmap);}

阅读全文(3265) | 回复(0) | 编辑 | 精华


发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.043 second(s), page refreshed 144752412 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号