窗口总在最前

 

vc使用技巧集(对话框控件)

相关教程:

 

 

正文

 

十五、设置控件字体颜色:(例如STATIC控件)

OnCtlColor函数中添加如下代码:(可能需要选择STATIC的简单属性)

if(nCtlColor==CTLCOLOR_STATIC) { pDC->SetTextColor(RGB(255,0,0)); pDC->SetBkColor(RGB(128,128,128));//设置文本背景色 pDC->SetBkMode(TRANSPARENT);//设置背景透明 }

其他控件的宏定义为:

  .CTLCOLOR_BTN       按钮控件

  .CTLCOLOR_DLG       对话框

  .CTLCOLOR_EDIT      编辑框

  .CTLCOLOR_LISTBOX   列表控件

  .CTLCOLOR_MSGBOX    消息控件

  .CTLCOLOR_SCROLLBAR 滚动条控件

  .CTLCOLOR_STATIC    静态控件  

十六、将字符转换为数字:

int i = atoi("12345"); sscanf("12345","%d",&i);  

十七、调用外部应用程序可使用的函数

  CreateProcessWinExecShellExecute

例:ShellExecute(pWnd->m_wnd, "open", "my.exe", NULL, NULL, SW_NORMAL)

1、父窗体句柄,2、命令"open",3、文件路径,4、参数,5、运行路径,6、显示方式

十八、经典安装程序制作软件InstallShield for Microsoft Visual C++6.0

release 方式是在build菜单中的Set Active configuration中改

project菜单里面,Add to Projectcomponent and control来加入ocx控件

十九、控件的注册

1.注册

regsvr32 x:\xxx\demo.ocx 不一定非得在 Windows 系统目录

2.卸载

regsvr32 /u x:\xxx\demo.ocx

二十、获取当前时间:

CTime m_time=CTime::GetCurrentTime(); char szText[100]; memset(szText,0,100); sprintf(szText,"%d_%d_%d",m_time.GetHour(),m_time.GetMinite(),m_time.GetSecond()); // 如何得到当前时间日期 CTime time = CTime::GetCurrentTime(); CString m_strTime = time.Format("%Y-%m-%d %H:%M:%S"); // 方法二 SYSTEMTIME ti; GetSystemTime(&ti); // 如何得到当前时间日期 ti.wMilliseconds; // 得到毫秒时间 SYSTEMTIME time; CString str; GetLocalTime( &time ); str.Format( "%04d:%02d:%02d",time.wYear,time.wMonth.....);

二一、修改单文档程序的标题:

OnCreat()中加入  SetWindowText("weichao");

CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中加入  cs.style =WS_OVERLAPPEDWINDOW;

 

二二、隐藏程序在任务栏的图标:

对话框程序放OnInitDialog()函数:

SetWindowLong(this->m_hWnd,GWL_EXSTYLE,WS_EX_TOOLWINDOW);//隐藏任务拦按钮

二三、读取编辑框内容:

    GetDlgItemText(IDC_EDIT_TXDATA,m_strTXData);

二四、自绘菜单宽度不对,高度是对的,解决办法:

ClassWizard中的ClassName,CMianFrame,Messages下选WM_CONTEXTMENU并生成相应的函数,如下:

 void CMainFrame::OnContextMenu(CWnd* pWnd, CPoint point)

 {

  CMenu menu;

     menu.LoadMenu(IDR_MENU1);//IDR_MENU1是你要弹出菜单的ID.

     CMenu *popup=menu.GetSubMenu(0);

     popup->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);

 }

二五、重启计算机

调用一个API函数ExitWindowsEx就可以了,

两个参数:UFlag,标记,可以选择EWX_REBOOT,EWX_SHUTDOWN,EWX_POWEROFF再或上EWX_FORCE第二个参数就是0

二六、无title对话框的移动

void CScreenSnapDlg::OnLButtonDown(UINT nFlags, CPoint point)

{

    //实现窗体无标题移动

    PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));

    

    CDialog::OnLButtonDown(nFlags, point);

}

二七、获取操作系统版本

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

OsVersionInfo.dwOSVersionInfoSize= sizeof(OSVERSIONINFO);

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

二八、设置对话框为最顶层:(在OnInitDialog中添加)

SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

二九、对话框程序不在任务栏显示:(在OnInitDialog中添加)

ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);

三十、向对话框窗口添加右键菜单:

 CMenu  menu,*pmenu;  

 menu.LoadMenu(IDR_MENU1);  

 pmenu=menu.GetSubMenu(0);  

 

 CPoint  ptScreen(point);  

 ClientToScreen(&ptScreen);  

 

 pmenu->TrackPopupMenu(TPM_RIGHTBUTTON,ptScreen.x,ptScreen.y,this);  

三一、文件查找:(例查找连续的换行符)

FILE *fp,*fp1; int flag=0; int ch; fp=fopen("c:\\test.txt","r"); fp1=fopen("c:\\wrttest.txt","w"); while(!feof(fp)) { ch=fgetc(fp); if(feof(fp)) break; if(ch==’\n’&&flag==1) continue; else if(ch==’\n’&&flag==0) flag=1; else flag=0; fputc(ch,fp1); } fclose(fp1); fclose(fp);

三二、托盘菜单不点击不能消失的解决办法:

在菜单之后使用下述代码:

CPoint pt; GetCursorPos(&pt); SetForegroundWindow(); NotifyMenu.TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,this); PostMessage(WM_NULL,0,0);

三、对话框由小到大显示的动画效果:

InitDialog中增加:

 ShowWindow(SW_HIDE); CRect dlgRect; GetClientRect(&dlgRect); CPoint centerPoint; centerPoint.x=dlgRect.Width()/2; centerPoint.y=dlgRect.Height()/2;//得到对话框的中点坐标 CRgn testrgn; this->ShowWindow(SW_HIDE); int m=GetSystemMetrics(SM_CYSIZEFRAME); //以下代码实现对话框的动态弹出 for (int i=10;i<dlgRect.Width()/2+m;i+=1) { testrgn.CreateRectRgn(centerPoint.x-i,centerPoint.y-i,centerPoint.x+i,centerPoint.y+i); SetWindowRgn((HRGN) testrgn,TRUE); ShowWindow(SW_SHOW); CenterWindow(); testrgn.DeleteObject(); }

三四、按行读出文本文件:

下面的例子演示了一行一行取,直到取完。

 CStdioFile myFile; CString ReadFileString; if(myFile.Open("C:\\Readme.txt", Cfile::modeRead) == TRUE) { while(myFile.ReadString(ReadFileString) != FALSE) { //... 处理代码 } }

三五、使用IDC_HAND时提示未定义,加入以下代码

#if(WINVER >= 0x0500)

#define IDC_HAND            MAKEINTRESOURCE(32649)

#endif /* WINVER >= 0x0500 */

三六、使应用程序启动时不自动创建新文档

在默认情况下,用AppWizard开发的SDI/MDI应用程序在启动时创建一个新的文档。如果要使应用程序在启动时不创建新

 

文档,只需在应用类CmyApp::InitInstance()函数的ProcessShellCommand调用前加上下面的语句就可以了:

 

 cmdInfo.m_nShellCommand = CComandLineInfo::FileNothing;

三七、播放mp3

CFileDialog file(true); if(file.DoModal()==IDOK) { CString filename=file.GetFileName(); if(hwnd!=NULL) { MCIWndDestroy(hwnd); } hwnd=MCIWndCreate(this->m_hWnd,NULL,MCIWNDF_NOPLAYBAR,filename); ::ShowWindow(hwnd,SW_HIDE); MCIWndSetVolume(hwnd,1000); MCIWndPlay(hwnd); }     

三八、获取屏幕RGB值:OnTimer中添加

CPoint pos; GetCursorPos(&pos);//获取鼠标坐标 HDC hDC = ::GetDC(NULL); COLORREF clr = ::GetPixel(hDC, pos.x, pos.y); CString ClrText; ClrText.Format("R:%d G:%d B:%d",GetRvalue(clr),GetGvalue(clr),GetBvalue(clr));

三九、打开一个网址:

打开http://www.sina.com.cn这个站点如下:

ShellExecute(NULL, "open", "http://www.sina.com.cn",NULL, NULL, SW_MAXIMIZE );

此命令将以默认浏览器打开http://www.sina.com.cn,并将加开后的窗口最大化。

又例:

ShellExecute(NULL, "open", "IEXPLORE.exe http://www.sina.com.cn",NULL, NULL,

SW_MAXIMIZE );

此命令将直接用IE打开一个sina的站点。不过将开一个新的窗口。

四十、位图按钮:

CButton *pRadio = (CButton*)GetDlgItem(IDC_RADIO);

pRadio->SetBitmap(::LoadBitmap(AfxGetInstanceHandle(),

MAKEINTRESOURCE(IDB_BITMAP)));

 

 

26..Dll调用

 typedef void (WINAPI * TESTDLL)(); HINSTANCE hmod; hmod = ::LoadLibrary ("mfcdll.dll"); if(hmod==NULL) { AfxMessageBox("Fail"); } TESTDLL lpproc; lpproc = (TESTDLL)GetProcAddress (hmod,"Show"); if(lpproc!=(TESTDLL)NULL) (*lpproc)(); FreeLibrary(hmod);   

27.透明窗口

 

BOOL CTestDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE, GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000); HINSTANCE hInst = LoadLibrary("User32.DLL"); if(hInst) { typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD); MYFUNC fun = NULL; fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes"); if(fun)fun(this->GetSafeHwnd(),0,128,2); FreeLibrary(hInst); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }   

28.去掉Dialog标题栏

 ModifyStyle( WS_CAPTION, WS_MINIMIZEBOX, SWP_DRAWFRAME );

 设置鼠标:

  BOOL CPartTransparentDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)

 {

 // TODO: Add your message handler code here and/or call default

 SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));

 return TRUE;

 }

  拖动窗口,OnLButtonDown时调用

  PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y));

 

 

29.启动程序

 ::ShellExecute(NULL,"open","http://www.tomcom",NULL,NULL,SW_SHOWNORMAL);

 

30. 获取系统信息

  // Create system menu style font LOGFONT lf; ZeroMemory(&lf, sizeof(LOGFONT)); NONCLIENTMETRICS nm; nm.cbSize = sizeof(NONCLIENTMETRICS); VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, nm.cbSize, &nm, 0)); lf = nm.lfMessageFont; m_fontWnd.CreateFontIndirect(&lf);   

31. 如何去掉CStatic讨厌的背景颜色 

 

重载WM_CTLCOLOR,同时将static的属性设置为TRANSPARENT

HBRUSH CDialog2::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Change any attributes of the DC here ////////////////////// // 静态文本控件透明 ////////////////////// if(pWnd->GetDlgCtrlID() == IDC_STATIC) // 需要设置透明背景的static控件的id { pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(0,0,0));//此处设置字体的颜色 return HBRUSH(GetStockObject(HOLLOW_BRUSH)); // (HBRUSH)GetStockObject(NULL_BRUSH); } /////////////////// // 结束添加 /////////////////// // TODO: Return a different brush if the default is not desired return hbr; }   

32. 窗口总在最前

 ::SetWindowPos(m_wndMsn.GetSafeHwnd(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

 

 

static HINSTANCE hins;
if(!hins)
{
     //如果help.chm不存在,就打开
     hins = ShellExecute(this->m_hWnd,"open","help.chm",NULL,NULL,SW_SHOWNORMAL);
}
else
{
    //把已经打开的help.chm置为最前的窗口,这里应该怎么写啊?
    //把已经打开的help.chm置为最前的窗口,这里应该怎么写啊?
    //把已经打开的help.chm置为最前的窗口,这里应该怎么写啊?
}

你可能感兴趣的:(窗口总在最前)