• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            elva

            VC小技巧20個

            一、打開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.dll
            SHUTDOWNDLG ShutDownDialog; //指向shell32.dll庫中顯示關機對話框函數的指針
            if(hInst != NULL)
            {
                //獲得函數的地址并調用之
                ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);
                (*ShutDownDialog)(0);
            }

            五、枚舉所有字體
            LOGFONT lf;
            lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure
            strcpy(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), &rWorkArea, 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);
                …
            }

            13、運行其它程序
            //運行EMAIL或網址
            char szMailAddress[80]; 
            strcpy(szMailAddress,"mailto:netvc@21cn.com");
            ShellExecute(NULL, "open", szMailAddress, NULL, NULL, SW_SHOWNORMAL);

            //2、運行可執行程序
            WinExec("notepad.exe",SW_SHOW); //運行計事本

            14、動態增加或刪除菜單
            (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; 
                }
            }

            15、測試ALT鍵是否按下:
            GetKeyState(VK_MENU);
            GetAlt();
            16、檢查是否按下鼠標左鍵
            if((nFlags&MK_LBUTTON)==MK_LBUTTON)


            17、檢查鍵盤輸入 
            在OnKeyDown中的參數nChar是一個數值,當顯示的時候,需要轉換成字符,使用如下的命令:
            char lsChar;
            lsChar=char(nChar);
            if(lsChar=='A');
            {
            .......
            }

            18、調用另一個函數::GetKeyState(),用一個特定的鍵代碼來確定法鍵是否被按下。如果::GetKeyState函數的返回值是負的,表示該鍵被按下。如果返回值是非負的,表示該留未被按下。例如:如果要確定shift鍵是否被按下,可以使用下面的代碼:
            if(::GetKeyState(VK_SHIFT)<O)
            {
                AfxMessageBox("shift is pressed");
            }

            19.如何在編程的過程中隨時結束應用程序(常規) 
            1)需要向窗口發送 WM_CLOSE/WM_QUIT消息,
            調用 CWnd::OnClose成員函數并允許對用戶提示是否保存修改過的數據.
            AfxGetMainWnd()->SendMessage(WM_CLOSE); //別忘了先得到當前窗口的指針
            2)使用函數: void PostQuitMessage( int nExitCode // exit code );
            3)使用標準函數:void exit( int status ); //盡量不要在MFC中使用

            20.得到屏幕的尺寸大小
            HWND hWnd;
            CRect Rect;
            hWnd = ::GetDesktopWindow();
            ::GetClientRect(hWnd, &Rect);

            //---------------------------------------------------------
            如何查詢和設置系統參數
                在Windows 3.1 SDK中介紹過SDK函數SystemParametersInfo,調用該函數可以查詢和設置系統參數,諸如按鍵的重復速率設置、鼠標雙擊延遲時間、圖標字體以及桌面覆蓋位圖等等。  
            //Create a font that is used for icon titles.  
            LOGFONT stFont;  :: SystemParametersInfo (SPIF_GETICONTITLELOGFONT,       sizeof (LOGFONT), &stFont, SPIF_SENDWININICHANGE);  
            m_font.CreateFontIndirect (&stFont);  //Change the wallpaper to leaves.bmp.  
            :: SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, _T("forest.bmp"),SPIF_UPDATEINIFILE);  

            //---------------------------------------------------------
            如何使用一個預定義的Windows光標
                  調用CWinApp:: LoadStandardCursor并傳送光標標識符。
                 BOOL CSampleDialog:: OnSetCursor (CWnd* pWnd, UINT nHitTest, UINT message)  {       //Display wait cursor if busy.       
            if (m_bBusy)       {           
            SetCursor (AfxGetApp () ->LoadStandardCursor (IDC_WAIT));           
            return TRUE;       }       
            return CDialog:: OnSetCursor (pWnd. nHitTest,message);  }

            posted on 2007-07-16 14:21 葉子 閱讀(397) 評論(0)  編輯 收藏 引用 所屬分類: C\C++

            国产精品久久久久影院色| A级毛片无码久久精品免费| 久久精品国产99国产电影网 | 国产精品久久影院| 久久久久久久综合综合狠狠| 欧美精品九九99久久在观看| 久久精品国产亚洲欧美| 人妻无码久久精品| 久久91精品国产91久久小草| 性做久久久久久久久老女人| 1000部精品久久久久久久久| 亚洲中文字幕伊人久久无码| 热久久国产精品| 亚洲欧美成人综合久久久| 久久久久国色AV免费看图片| 亚洲AV乱码久久精品蜜桃| 欧美一级久久久久久久大| 99久久精品午夜一区二区| 久久精品卫校国产小美女| 国产福利电影一区二区三区久久久久成人精品综合| 久久久久18| 精品久久久久久国产91| 亚洲AV无码一区东京热久久| 久久精品成人欧美大片| 国产AV影片久久久久久| 国产精品久久自在自线观看| 天天爽天天狠久久久综合麻豆| 久久99国产精品久久99小说 | 久久午夜夜伦鲁鲁片免费无码影视| 久久免费精品视频| 波多野结衣中文字幕久久| av无码久久久久不卡免费网站| 伊人久久大香线蕉综合影院首页| 免费一级欧美大片久久网 | 亚洲欧美日韩久久精品第一区| 欧美激情精品久久久久久久九九九| 99久久精品费精品国产| 久久精品一区二区三区不卡| 久久久青草青青亚洲国产免观| 国产成人久久精品激情| 91精品国产综合久久久久久|