VC小技巧20个

Jun 07, 2016 pm 03:41 PM
cd-rom 열려 있는 기능

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으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Douyin 미니게임은 어디서 열 수 있나요? Douyin 미니 게임을 여는 두 가지 방법 Douyin 미니게임은 어디서 열 수 있나요? Douyin 미니 게임을 여는 두 가지 방법 Mar 15, 2024 am 09:30 AM

Douyin은 인기 있는 짧은 비디오 소셜 애플리케이션입니다. 사용자는 다양한 유형의 짧은 비디오 콘텐츠를 보고 공유할 수 있을 뿐만 아니라 플레이할 수 있는 일련의 미니 게임도 제공합니다. 그렇다면 Douyin 미니게임은 어디서 구할 수 있나요? Douyin 미니게임 입구는 어디인가요? 아래의 자세한 튜토리얼을 살펴보겠습니다. 방법 1: 미니 프로그램 열기 1. 내 옵션을 클릭하세요. Douyin 홈페이지에 진입한 후 내 옵션을 클릭하여 들어갑니다. 2. 내 인터페이스에 들어간 후 위의 세 개의 수평선 버튼을 클릭합니다. 3. 미니 프로그램을 클릭하세요. 세 개의 수평선 옵션을 연 후 안에 있는 미니 프로그램을 클릭하세요. 4. Douyin 미니 게임을 클릭하고 미니 프로그램 인터페이스에 들어간 후 Douyin 미니 게임 옵션을 클릭하여 엽니다. 방법 2: 검색 후 열기 1. 돋보기를 클릭하여 입력

Win11 팁 공유: Microsoft 계정으로 로그인을 건너뛰는 한 가지 요령 Win11 팁 공유: Microsoft 계정으로 로그인을 건너뛰는 한 가지 요령 Mar 27, 2024 pm 02:57 PM

Win11 팁 공유: Microsoft 계정 로그인을 건너뛰는 한 가지 요령 Windows 11은 Microsoft가 출시한 최신 운영 체제로, 새로운 디자인 스타일과 많은 실용적인 기능을 갖추고 있습니다. 그러나 일부 사용자의 경우 시스템을 부팅할 때마다 Microsoft 계정에 로그인해야 하는 것이 다소 성가실 수 있습니다. 당신이 그들 중 하나라면, Microsoft 계정 로그인을 건너뛰고 데스크탑 인터페이스로 직접 들어갈 수 있는 다음 팁을 시도해 볼 수도 있습니다. 먼저 로그인하려면 Microsoft 계정 대신 시스템에 로컬 계정을 만들어야 합니다. 이렇게 하면 장점은

베테랑의 필수품: C 언어의 * 및 &에 대한 팁과 주의사항 베테랑의 필수품: C 언어의 * 및 &에 대한 팁과 주의사항 Apr 04, 2024 am 08:21 AM

C 언어에서는 다른 변수의 주소를 저장하는 포인터를 나타내고, &는 변수의 메모리 주소를 반환하는 주소 연산자를 나타냅니다. 포인터 사용에 대한 팁에는 포인터 정의, 포인터 역참조 및 포인터가 유효한 주소를 가리키는지 확인하는 것이 포함됩니다. 주소 연산자 사용에 대한 팁에는 변수 주소 가져오기 및 배열 요소의 주소를 가져올 때 배열의 첫 번째 요소 주소 반환이 포함됩니다. . 문자열을 반전시키기 위해 포인터 및 주소 연산자를 사용하는 방법을 보여주는 실제 예입니다.

초보자를 위한 양식 작성 요령은 무엇입니까? 초보자를 위한 양식 작성 요령은 무엇입니까? Mar 21, 2024 am 09:11 AM

우리는 엑셀로 표를 생성하고 편집하는 일이 많은데 이제 막 소프트웨어를 접한 초보자로서 엑셀을 이용해 표를 만드는 방법은 생각보다 쉽지 않습니다. 아래에서는 초보자, 즉 초보자가 마스터해야 할 테이블 생성의 몇 가지 단계에 대해 몇 가지 훈련을 수행합니다. 초보자를 위한 샘플 양식은 다음과 같습니다. 작성 방법을 살펴보겠습니다! 1. 새로운 엑셀 문서를 만드는 방법은 두 가지가 있습니다. [바탕화면] - [새로 만들기] - [xls] 파일의 빈 곳을 마우스 오른쪽 버튼으로 클릭하시면 됩니다. [시작]-[모든 프로그램]-[Microsoft Office]-[Microsoft Excel 20**]을 사용할 수도 있습니다. 2. 새 ex를 두 번 클릭합니다.

지뢰 찾기를 여는 방법? - 지뢰 찾기에서 작은 깃발을 표시하는 방법은 무엇입니까? 지뢰 찾기를 여는 방법? - 지뢰 찾기에서 작은 깃발을 표시하는 방법은 무엇입니까? Mar 18, 2024 pm 10:46 PM

지뢰 찾기를 여는 방법? 지뢰 찾기(Minesweeper)는 고전적인 싱글 플레이어 게임으로, 플레이어의 목표는 어느 사각형에 지뢰가 있는지 확인하기 위해 사각형 안에 있는 숫자를 찾아내는 것입니다. 공개된 사각형에 지뢰가 없으면 게임은 계속됩니다. 공개된 사각형에 지뢰가 있으면 게임이 즉시 종료됩니다. 다음으로 지뢰찾기 게임 진입 방법을 자세히 소개하겠습니다. 1단계: 컴퓨터 켜기 먼저 컴퓨터를 켜야 합니다. 지뢰찾기는 컴퓨터에서만 플레이할 수 있는 컴퓨터 게임입니다. 아직 컴퓨터를 켜지 않은 경우 컴퓨터가 켜지고 바탕 화면이 표시될 때까지 전원 버튼을 길게 누릅니다. 2단계: 지뢰찾기 게임을 찾으세요. 바탕화면에서 지뢰찾기 게임 아이콘을 찾으세요. 지뢰 찾기가 이미 설치되어 있으면 바탕 화면에 나타나야 합니다. 그렇지 않은 경우 컴퓨터의 시작 메뉴에서 지뢰찾기 게임을 검색하세요.

VSCode 시작 가이드: 초보자가 사용 기술을 빠르게 익히기 위해 꼭 읽어야 할 책입니다! VSCode 시작 가이드: 초보자가 사용 기술을 빠르게 익히기 위해 꼭 읽어야 할 책입니다! Mar 26, 2024 am 08:21 AM

VSCode(Visual Studio Code)는 Microsoft에서 개발한 오픈 소스 코드 편집기로, 강력한 기능과 풍부한 플러그인 지원을 갖추고 있어 개발자가 선호하는 도구 중 하나입니다. 이 기사에서는 초보자가 VSCode 사용 기술을 빠르게 익히는 데 도움이 되는 소개 가이드를 제공합니다. 이번 글에서는 VSCode 설치 방법, 기본적인 편집 작업, 단축키, 플러그인 설치 등을 소개하고, 독자들에게 구체적인 코드 예시를 제공하겠습니다. 1. 먼저 VSCode를 설치하세요.

PHP 프로그래밍 기술: 3초 안에 웹페이지로 이동하는 방법 PHP 프로그래밍 기술: 3초 안에 웹페이지로 이동하는 방법 Mar 24, 2024 am 09:18 AM

제목: PHP 프로그래밍 팁: 3초 안에 웹 페이지로 이동하는 방법 웹 개발을 하다 보면 일정 시간 내에 자동으로 다른 페이지로 이동해야 하는 상황이 자주 발생합니다. 이 기사에서는 PHP를 사용하여 3초 내에 페이지로 이동하는 프로그래밍 기술을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 먼저, 페이지 점프의 기본 원리는 HTTP 응답 헤더의 Location 필드를 통해 구현됩니다. 이 필드를 설정하면 브라우저가 지정된 페이지로 자동으로 이동할 수 있습니다. 다음은 P를 사용하는 방법을 보여주는 간단한 예입니다.

공개된 Win11 트릭: Microsoft 계정 로그인을 우회하는 방법 공개된 Win11 트릭: Microsoft 계정 로그인을 우회하는 방법 Mar 27, 2024 pm 07:57 PM

공개된 Win11 트릭: Microsoft 계정 로그인을 우회하는 방법 최근 Microsoft는 새로운 운영 체제인 Windows11을 출시하여 많은 관심을 받았습니다. 이전 버전에 비해 Windows 11은 인터페이스 디자인과 기능 개선 측면에서 많은 새로운 조정이 이루어졌지만 가장 눈길을 끄는 점은 사용자가 Microsoft 계정으로 시스템에 로그인하도록 강요한다는 것입니다. . 일부 사용자의 경우 로컬 계정으로 로그인하는 데 더 익숙하고 개인 정보를 Microsoft 계정에 바인딩하는 것을 꺼릴 수 있습니다.

See all articles