zoukankan      html  css  js  c++  java
  • VC中常用的方法 Chars

    一、打开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), &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->W 

    idth()) 
    {//调整右 
    //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的,另一个是3 

    2*32的,注意要一起修改。 
    动态更改: 向主窗口发送WM_SETICON消息.代码如下: 
    HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICON); 
    ASSERT(hIcon); 
    AfxGetMainWnd()->SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon); 
    十六、另一种改变窗口标题的方法 
    使用语句 CWnd* m_pCWnd = AfxGetMainWnd( ),然后,再以如下形式调用SetWindowTe 
    xt()函数: 
    SetWindowText( *m_pCWnd,(LPCTSTR)m_WindowText);// m_WindowText可以是一个CSt 
    ring类的变量。 
    十七、剪切板上通过增强元文件拷贝图像数据 
    下面代码拷贝通过元文件拷贝图像数据到任何应用程序,其可以放置在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 clipboard 
    OpenClipboard(); 
    EmptyClipboard(); 
    ::SetClipboardData(CF_ENHMETAFILE,hMF); 
    CloseClipboard(); 

    //DeleteMetaFile(hMF); 
    delete m_pMetaDC; 
    十八、剪切板上文本数据的传送 
    把文本放置到剪接板上: 
    CString source; 
    //put your text in source 
    if(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.Heigh 
    t(), 
    &dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY); 
    dcMem.SelectObject(&poldBitmap); 
    }

    ------------------------------------------

    1. 在CSatic控件上增加图标及位图

    CStatic *pStat = NULL;

    pStat = (CStatic*)GetDlgItem(控件ID);

    pStat->ModifyStyle(SWP_NOZORDER, SS_ICON);

    可用两种方法增加图标

    (1) pStat->SetIcon(AfxGetApp()->LoadIcon(图标ID));

    (2) pStat->SetIcon(LoadIcon(::AfxGetInstanceHandle(),”图标名称”)); //图标名字改为“IDI_ICON”的形式,因为这里要求的是字符串形式的名称。

    增加Bmp图片的形式同上,将ModifyStyle中的SS_ICON改为SS_BITMAP。用相应的位图增加函数即可。

     

    2. CClientDC,CWindowDC

    这两个类都从CDC类派生,CClientDC类用于获取客户区的DC(不包括标题栏,菜单栏,工具栏),创建了CClientDC类对象后不需用ReleaseDC来释放。如:

    CCleintDC dc(this);获取本窗口的dc,CClientDC dc(GetParent())可获取父窗口DC,此时就可在非客户区进行dc操作。

    CWindowDC 获取整个窗口的dc,可对整个窗口进行操作,CWindowDC(GetParent()) 注意在这获得的父窗口对于对话框情况下将是windows窗口,最后无需ReleaseDC释放

     

    GetDesktopWindow()获取桌面窗口句柄。

     

    ::CreateIC("DISPLAY",NULL,NULL,NULL);获取桌面的HDC

     

    3. 获取随机数rand()

    要获取一定范围内的随机数可用:

    Srand((unsigned) time(NULL)); //意思是每次产生的随机数都不相同.

    (int)(rand())/(float) RAND_MAX * 10); //返回1-10之间的随机数

     

    4. 获取路径:

    char path[MAX_PATH] = "\0";

    GetModuleFileName(NULL, path, MAX_PATH); //应用程序路径

    GetSystemDirectory(); //获取Windows系统目录路径

    GetWindowDirectory() //获取Windows目录路径

     

    5. 动态加载ODBC数据源

    //mdbName为数据库名称, DSN为数据源名称

    void SetODBCSource(char * mdbName ,char * DSNName)

    {

    char path[256]="";

    char pathMDB[256]="";

    GetAppPath(path);

    strcpy(pathMDB,path);

    strcat(pathMDB, "\\");

    strcat(pathMDB, mdbName);

    char MdbConfig[256]= "DSN=" ;// pwd

    strcat(MdbConfig , DSNName);

    char * pMconfig = MdbConfig + strlen(MdbConfig) + 1 ;

    strcpy(pMconfig,"DBQ=");

    pMconfig += 4;

    strcat(pMconfig,pathMDB);

    pMconfig += strlen(pathMDB) + 1 ;

    strcpy(pMconfig,"DEFAULTDIR=");

    strcat(pMconfig,path);

    strcat(pMconfig,"\0");

    if(!SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"Microsoft Access

    Driver (*.mdb)\0",MdbConfig)) //注意Driver后的空格

    {

    TRACE("加载数据库失败,请检查数据库是否存在\n");

    return;

    }

     

    6. 线程退出

    线程退出请使用return 或 ExitThread()来正常退出线程,尽是避免使用TerminateThread来终止线程,因为终止后线程资源将不会被释放。

    一般情况下在CreateThread创建了线程后即使用CloseHandle()来关闭线程句柄,以防止TerminateThread得到句柄后,进行线程的强制终止。

     

    7. 自定义宏检查错误BOOL错误。

    #define ASSERT_ERROR(Code)\

    {\

    If (Code)\

    AfxMessageBox(“提示1 “);\

    Else \

    AfxMessageBox(“错误1”);\

    }

    定义以后可在需要使用的地方使用,如:BOOL bStat = TRUE;

    ASSERT_ERROR(bStat); //此时将执行“提示1”,bStat = FALSE时执行“错误1”

     

    8. 将程序加入注册表启动项:

    LPCTSTR lpcAppPath = “程序路径”;

    CString str = “SOFTWARE\\Microsoft\\Windows\\CurrentverSion\\Run”;

    HKEY hResult;

    RegOpenKey(HKEY_LOCAL_MACHINE, (LPCSTR)str.GetBuffer(0), &hResult);

    RegSetValueEx(hResult, “程序名称”, 0, REG_SZ, (const unsigned char*)lpcAppPath,

    Sizeof(char) * strlen(lpcAppPath));

    RegCloseKey(hResult);

     

    9. 程序调试

    在调试环境下的Vlaue窗口中输入” @err,hr” 可返回当前发生的错误原因

     

    10. 获取工具条指针,工具条有一特殊标识(AFX_IDW_TOOLBAR)

    CToolBar *pTool = (CToolBar*)AfxGetMainWnd()->GetDescendantWindow(特殊标识)

    ;

    获取状态条指针。

    (CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);

     

    获取主窗口指针:

    CMainFrame *pFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);

     

    获取视类指针:

    CMyView *pView= CMyView*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveView();

    CMyView *pView=(CMyView*)GetActiveView();

     

    11.显示或隐藏任务栏:

    ::ShowWindow(::FindWindow(“Shell_TrayWnd”, NULL, SW_SHOW),隐藏用SW_HIDE

     

    12.使用基于对话框的程序在任务栏隐藏。

    This->ModifyStyleEx(WS_EX_APPWINDOW, 0);

     

    13.只允许程序运行一个实例:

    HANDLE h_Muex = CreateMutex(NULL, TRUE, m_pszAppName);

    If (GetLastError() == ERROR_ALREADY_EXISTS)

    Return False;

    ----------------------------------------------

    1.向注册表中写入DWORD值:

    比如:要隐藏任务栏上按右键时弹出的菜单,只要打开
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\
    后,
    在“Explorer”键值下新建下列DWORD值:NoTrayContextMenu,把值设为“1”就可以了.

    DWORD dwValue=1 //或者用16进制 0x00000001
    ::RegSetValueEx(hkey,
    "NoTrayContextMenu",
    0,
    REG_DWORD,
    (LPBYTE)&dwValue, //LPBYTE 即unsigned char* 
    sizeof(DWORD) )


    2.
    在程序中使用动画光标

    鼠标是程序与用户交互的主要手段,如果在程序里动态鼠标的话,就会为我们的程序
    增色不少,方法如下:
    HCURSOR hcur=::LoadCursorFromFile("AniCur.ani");
    ::SetClassLong(GetSafeHwnd(),GCL_HCURSOR,(LONG)hcur);

    LoadCursorFromFile()该函数根据一个文件中所含的数据创建光标。该文件由它的名字所指定
    或由一个系统光标鉴别器指定,该函数返回一个新建光标的句柄,文件所包含的光标数据可以是
    光标格式(CUR)或运动光标格式(.ANI)。

    SetClassLong()
    该函数替换在额外类存储空间的指定偏移地址的32位长整型值,或替换指定窗口
    所属类的WNDCLASSEX结构。第二个参数指定GCL_HCURSOR是为了替换与类有关的光标的句柄。


    3
    .获取Windows已经运行的时间:
    API
    函数GetTickCount()用于获取自windows启动以来经历的时间长度(毫秒)
    CString strTime ;
    strTime.Format("Windows
    已运行了%d小时%d分钟",
    ::GetTickCount()/1000/60/60,
    ::GetTickCount()/1000/60 % 60);
    AfxMessageBox(strTime);


    4.
    在Win2000/XP锁定计算机
    方法1:
    HINSTANCE hinst=::LoadLibrary("user32.dll");
    typedef BOOL (*FUN)(VOID);
    FUN fun=(FUN)::GetProcAddress(hinst,"LockWorkStation");
    fun();

    方法2:
    新建一个快捷方式名称为LockComputer目标为
    %windir%\System32\rundll32.exe user32.dll,LockWorkStation 
    然后使用ShellExecute(NULL,NULL,"LockComputer.lnk",NULL,NULL,SW_HIDE);


    5
    .在Win2000/XP中设计透明的对话框

    在Win2000/XP的User32.dll中有一个函数可以用来设置透明的窗体,函数原型为:
    BOOL SetLayeredWindowAttributes(
    HWND hwnd, // 
    应用程序窗口的句柄
    COLORREF crKey, // 
    掩码的颜色,可以用RGB(r,g,b)来指定
    BYTE bAlpha, // 
    掩码颜色部分的Alpha值,0-255,0是全透明,255是完全不透明
    DWORD dwFlags // 
    透明方式
    ); 
    在对话框的OnInitDialog()函数中加如以下代码就可以实现透明效果

    SetWindowLong(GetSafeHwnd(),
    GWL_EXSTYLE,
    GetWindowLong(AfxGetMainWnd()->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
    HINSTANCE hInst = LoadLibrary("User32.DLL"); 
    if(hInst) 

    typedef BOOL (WINAPI* TRANSPARENT)(HWND,COLORREF,BYTE,DWORD); 
    TRANSPARENT fun =( TRANSPARENT)GetProcAddress(hInst,"SetLayeredWindowAttributes")
    fun(GetSafeHwnd(),0,200,2); //
    第三个参数为透明度 0-255
    FreeLibrary(hInst); 
    }

    6. 数制转化:

    使用itoa()函数可以很方便地在各种数制之间转换,如 
    int number = 12345; 
    char string[25]; 
    itoa(number, string, 2); //按二进制转换 
    itoa(number, string, 16); //按16进制转换 
    itoa()函数在stdlib.h中定义


    7 Slider
    和ScrollBar控件的使用

    无论是标准滚动条,还是滚动条控件,滚动条的通知消息都是用WM_HSCROLL和WM_VSCROLL消息发送出去的.
    下面分别举例讲述其用法:
    一、Slider控件:
    void CFfDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    CSliderCtrl* pSliderCtrl=(CSliderCtrl*)pScrollBar;
    CString str; 
    str.Format("%d",pSliderCtrl->GetPos());
    GetDlgItem(IDC_EDIT1)->SetWindowText(str); 
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
    }
    二、ScrollBar控件:
    void CFfDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    if(pScrollBar==GetDlgItem(IDC_SCROLLBAR1))
    {
    switch(nSBCode) //
    滚动条的通知消息码
    {
    case SB_THUMBTRACK: //
    滚动框被拖动
    m_scroll.SetScrollPos(nPos);
    a=nPos;
    break;
    case SB_LINERIGHT: //
    向右滚动一行(列)
    a=m_scroll.GetScrollPos()+1;
    m_scroll.SetScrollPos(a);
    if(a>255)
    a=255;
    break;

    case SB_LINELEFT: //向左滚动一行(列). 
    a=m_scroll.GetScrollPos()-1;
    m_scroll.SetScrollPos(a);
    if(a<0)
    a=0;
    break;
    case SB_PAGERIGHT : //向右滚动一页.

    a=m_scroll.GetScrollPos()+10;
    m_scroll.SetScrollPos(a);
    if(a>255)
    a=255;
    break;

    case SB_PAGELEFT: //向左滚动一页 
    a=m_scroll.GetScrollPos()-10;
    m_scroll.SetScrollPos(a);
    if(a<0)
    a=0;
    break;
    }
    char szPos[10];
    itoa(a,szPos,10); 
    GetDlgItem(IDC_EDIT1)->SetWindowText(szPos);
    }
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
    }
    好了,现在拖动上面的滚动条和滑动条,编辑框中便会同步的显示出当前的位置。

    ********************************************************************************

    键字 Afx全局函数及MFC常见数据类型
    原作者姓名 相生昌

    介绍
    Afx全局函数及MFC常见数据类型

    正文
    AfxBeginThread:开始一个新的线程
    AfxEndThread:结束一个旧的线程
    AfxFormatString1:类似printf一般地将字符串格式化
    AfxFormatString2:类似printf一般地将字符串格式化
    AfxMessageBox:类似Windows API 函数 MessageBox
    AfxOuputDebugString:将字符串输往除错装置
    AfxGetApp:获得application object (CwinApp派生对象)的指针
    AfxGetMainWnd:获得程序主窗口的指针
    AfxGetInstance:获得程序的instance handle
    MFC数据类型
    下面这些是和Win32程序共同使用的数据类型
    BOOL:布尔值,取值为TRUE or FALSE
    BSTR:32-bit 字符指针
    BYTE:8-bit整数,未带正负号
    COLORREF:32-bit数值,代表一个颜色值
    DWORD:32-bit整数,未带正负号
    LONG:32-bit整数,带正负号
    LPARAM:32-bit整数,作为窗口函数或callback函数的一个参数
    LPCSTR:32-bit指针,指向一个常数字符串
    LPSTR:32-bit指针,指向一个字符串
    LPCTSTR:32-bit指针,指向一个常数字符串,此字符串可以移植到Unicode和DBCS
    LPTSTR:32-bit指针,指向一个字符串,此字符串可以移植到Unicode和DBCS
    LPVOID:32-bit指针,指向一个未指定类型的数据
    LPRESULT:32-bit数值,作为窗口函数或callback函数的返回值
    UINT:在Win16中是一个16-bit 未带正负号整数,在Win32中是一个32-bit 未带 正负号整数,
    WNDPROC:32-bit指针,指向一个窗口函数
    WORD:16-bit 整数 ,未带正负号
    WPARAM:窗口函数或callback函数的一个参数,在Win16中是16-bit,在Win32中是32-bit
    下面这些是MFC独特的数据类型
    POSITION:一个数值,代表collection对象(例如数组或链表)中的元素位置,常 用于MFC collection classes(即数据处理类,如CArray)
    LPCRECT:32-bit指针,指向一个不变的RECT结构

  • 相关阅读:
    Atitit 经济学常见的流派 古典主义与凯恩斯主义
    Atitit 学习方法 体系化学习方法 Excel 科目,分类,专业 三级分类。。 知识点。。 课程就是每一个知识点的详细化。。 比如经济学 类别 专业 xx概论知识点 3、金
    atiitt it学科体系化 体系树与知识点概念大总结.xlsx
    Atitit 减少财政支出普通人如何蹭政府补贴措施 attilax大总结.docx
    Atitit 信用管理概论 attilax学习心得
    Atitit.月度计划日程表 每月流程表v5
    Atitit 企业6大职能 attilax总结
    Atitit 常见每日流程日程日常工作.docx v8 ver ampm imp 签到 am y 天气情况检查 am y 晨会,每天或者隔天 am 每日计划(项目计划,日计划等。 am
    Atitit 财政赤字解决方案
    Atitit 建设自己的财政体系 attilax总结 1.1. 收入理论 2 1.2. 收入分类 2 1.3. 2 1.4. 非货币收入 2 1.5. 2 1.6. 降低期望 2 1.7.
  • 原文地址:https://www.cnblogs.com/chars/p/2867400.html
Copyright © 2011-2022 走看看