搜尋

VC小技巧20个 1. 打开CD-ROM mciSendString(Set cdAudio door openwait,NULL,0,NULL); 2. 关闭CD_ROM mciSendString(Set cdAudio door closedwait,NULL,0,NULL); 3. 关闭计算机 OSVERSIONINFO OsVersionInfo; // 包含操作系统版本信息的数据结构 OsVersionIn

VC小技巧20个

1. 打开CD-ROM

mciSendString("Set cdAudio door openwait",NULL,0,NULL);

2. 关闭CD_ROM

mciSendString("Set cdAudio door closedwait",NULL,0,NULL);

3. 关闭计算机

OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构

OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

GetVersionEx(&OsVersionInfo); //获取操作系统版本信息

if(OsVersionInfo.dwPlatformId ==VER_PLATFORM_WIN32_WINDOWS)

{

    //Windows98,调用ExitWindowsEx()函数重新启动计算机

    DWORD dwReserved;

    ExitWindowsEx(EWX_REBOOT,dwReserved);//可以改变第一个参数,实现注销用户、 

    //关机、关闭电源等操作

    // 退出前的一些处理程序

}

4. 重启计算机

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);

}

5. 枚举所有字体

LOGFONT lf;

lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONTstructure

strcpy(lf.lfFaceName,"");

CClientDC dc (this);

//Enumerate the font families

::EnumFontFamiliesEx((HDC) dc,&lf,

(FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);

//枚举函数

int CALLBACK EnumFontFamProc(LPENUMLOGFONTlpelf,LPNEWTEXTMETRIC 

lpntm,DWORD nFontType,long lparam)

{

    // Create a pointer to the dialogwindow

    CDay7Dlg* pWnd = (CDay7Dlg*) lparam;

    // add the font name to the list box

    pWnd->m_ctlFontList.AddString(lpelf ->elfLogFont.lfFaceName);

    // Return 1 to continue fontenumeration

    return 1;

}

其中m_ctlFontList是一个列表控件变量

6. 一次只运行一个程序实例,如果已运行则退出

if( FindWindow(NULL,"程序标题")) exit(0);

7. 得到当前鼠标所在位置

CPoint pt;

GetCursorPos(&pt); //得到位置

8. 上下文菜单事件触发事件:

OnContextMenu事件

9. 显示和隐藏程序菜单

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();

}

10. 获取可执行文件的图标

HICON

hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);

if (hIcon &&hIcon!=(HICON)-1)

{

    pDC->DrawIcon(10,10,hIcon);

}

DestroyIcon(hIcon);

11. 窗口自动靠边程序演示

BOOL AdjustPos(CRect* lpRect)

{

    //自动靠边

    intiSX=GetSystemMetrics(SM_CXFULLSCREEN);

    intiSY=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

    {

        //调整左

//pWnd->SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE);

lpRect->OffsetRect(rcWA.left-iX,0);

AdjustPos(lpRect);

return TRUE;

    }

    if(iY

    {

//调整上

//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;

12. 给系统菜单添加一个菜单项

给系统菜单添加一个菜单项需要进行下述三个步骤:

首先,使用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 theright range.

    ASSERT(IDM_MYSYSITEM

    //Get pointer to system menu.

    CMenu* pSysMenu=GetSystemMenu(FALSE);

    ASSERT_VALID(pSysMenu);

    //Add a separator and our menu item tosystem menu.

    CString StrMenuItem(_T ("New menuitem"));

    pSysMenu->AppendMenu(MF_SEPARATOR);

    pSysMenu->AppendMenu(MF_STRING,IDM_MYSYSITEM, StrMenuItem);

    …

}

13. 运行其它程序

//运行EMAIL或网址

char szMailAddress[80]; 

strcpy(szMailAddress,"");

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("Alwayson &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)

{

    AfxMessageBox("shift ispressed");

}

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.1SDK中介绍过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 thewallpaper 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); }

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL的角色:Web應用程序中的數據庫MySQL的角色:Web應用程序中的數據庫Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

mysql:構建您的第一個數據庫mysql:構建您的第一個數據庫Apr 17, 2025 am 12:22 AM

構建MySQL數據庫的步驟包括:1.創建數據庫和表,2.插入數據,3.進行查詢。首先,使用CREATEDATABASE和CREATETABLE語句創建數據庫和表,然後用INSERTINTO語句插入數據,最後用SELECT語句查詢數據。

MySQL:一種對數據存儲的初學者友好方法MySQL:一種對數據存儲的初學者友好方法Apr 17, 2025 am 12:21 AM

MySQL適合初學者,因為它易用且功能強大。 1.MySQL是關係型數據庫,使用SQL進行CRUD操作。 2.安裝簡單,需配置root用戶密碼。 3.使用INSERT、UPDATE、DELETE、SELECT進行數據操作。 4.複雜查詢可使用ORDERBY、WHERE和JOIN。 5.調試需檢查語法,使用EXPLAIN分析查詢。 6.優化建議包括使用索引、選擇合適數據類型和良好編程習慣。

MySQL初學者友好嗎?評估學習曲線MySQL初學者友好嗎?評估學習曲線Apr 17, 2025 am 12:19 AM

MySQL適合初學者,因為:1)易於安裝和配置,2)有豐富的學習資源,3)SQL語法直觀,4)工具支持強大。儘管如此,初學者需克服數據庫設計、查詢優化、安全管理和數據備份等挑戰。

SQL是一種編程語言嗎?澄清術語SQL是一種編程語言嗎?澄清術語Apr 17, 2025 am 12:17 AM

是的,sqlisaprogramminglanguges pecialized fordatamanage.1)它具有焦點,focusingonwhattoachieveratherthanhow.2)sqlisessential forquerying forquerying,插入,更新,更新,和detletingdatainrelationalDatabases.3)

解釋酸的特性(原子,一致性,隔離,耐用性)。解釋酸的特性(原子,一致性,隔離,耐用性)。Apr 16, 2025 am 12:20 AM

ACID屬性包括原子性、一致性、隔離性和持久性,是數據庫設計的基石。 1.原子性確保事務要么完全成功,要么完全失敗。 2.一致性保證數據庫在事務前後保持一致狀態。 3.隔離性確保事務之間互不干擾。 4.持久性確保事務提交後數據永久保存。

MySQL:數據庫管理系統與編程語言MySQL:數據庫管理系統與編程語言Apr 16, 2025 am 12:19 AM

MySQL既是數據庫管理系統(DBMS),也與編程語言緊密相關。 1)作為DBMS,MySQL用於存儲、組織和檢索數據,優化索引可提高查詢性能。 2)通過SQL與編程語言結合,嵌入在如Python中,使用ORM工具如SQLAlchemy可簡化操作。 3)性能優化包括索引、查詢、緩存、分庫分錶和事務管理。

mySQL:使用SQL命令管理數據mySQL:使用SQL命令管理數據Apr 16, 2025 am 12:19 AM

MySQL使用SQL命令管理數據。 1.基本命令包括SELECT、INSERT、UPDATE和DELETE。 2.高級用法涉及JOIN、子查詢和聚合函數。 3.常見錯誤有語法、邏輯和性能問題。 4.優化技巧包括使用索引、避免SELECT*和使用LIMIT。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),