vc6.0如何vc 跳出whilee循环

VC++6.0的使用以及编程技巧整理
1、MDI子窗口一启动就最大化&&&
CChildFrame::PreCreateWindow(CREATESTRUCT&
& // & TODO: &
Modify & the & Window
& class & or &
styles & here & by
& modifying &
& // & & the
& CREATESTRUCT & cs
& cs.style=WS_CHILD & |
& WS_VISIBLE & |
& WS_OVERLAPPEDWINDOW|WS_MAXIMIZE;
!CMDIChildWnd::PreCreateWindow(cs) & )
& return & FALSE;
& return & TRUE;
2、主窗口最大化:&&
InitStance&&
函数中设定&&
m_nCmdShow的取值.&&&
&&&&&&&&&&&m_nCmdShow&&
SW_SHOWMAXIMIZED;&&&&
(!ProcessShellCommand(cmdInfo))&&
MDI窗口:&&
的PreCreateWindow函&&
数,设置WS_MAXIMIZE&&
文档一生成就最大化:&&
在视类重载的OnInitUpdate成员函数中加上:&&&&
CMDIChildWnd&&
*pWnd=(CMDIChildWnd&&
*)GetParentFrame();&&&&
pWnd-&MDIMaximize();
&3、设置多文档的标题
设置标题在如下两个函数
BOOL CTOLLGATE_OF_CITYDoc::OnNewDocument()
if (!CDocument::OnNewDocument())
return FALSE;
SetTitle ("你的文档名");
return TRUE;
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
m_strTitle ="标题";
return TRUE;
mdi怎样可以使启动程序时不打开子窗口?
在应用程序的初始化函数InitInstance中的
& CcommandLineInfo & cmdI
& 语句后加入: &
cmdInfo.m_nShellCommand=CCommandLineInfo::FileN
(要尤氲拇耄?&
& ParseCommandLine(cmdInfo); &
& (该句已有,不用加)
& 即可。 &
& 是CWinApp类中的函数
5 怎样单击窗体任何位置就可移动窗体
加上左键按下消息 &
CXXXDlg::OnLButtonDown(UINT & nFlags,
& CPoint & point)
//加上下面这句话 &
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));&&&&&
& CDialog::OnLButtonDown(nFlags,
point);&&&
6 VC下用ADO连接ORACLE数据库
Oracle公司提供的连接方式: &
& 使用标准安全级别:
& strConnect & =
& _T("Provider=OraOLEDB.OData
& Source=MyOracleDB;User &
Id=myUPassword=myP"); &
& 使用信任连接 &
& 1.strConnect & =
& _T("Provider=OraOLEDB.OData
& Source=MyOracleDB;User &
Id=/;Password=;"); & UID为'/'
& 2.strConnect & =
& _T("Provider=OraOLEDB.OData
Source=MyOracleDB;OSAuthent=1;");使用OSAuthent=1
& 对于连接字符串可以参考以下网页:
/library/default.asp?url=/library/en-us/ado270/htm/mdreforacleprovspec.asp?frame=true
http://download-/otndoc/oracle9i/901_doc/win.901/a90171/using.htm
& ===&ODBC &
配置数据源 &
& strConnect & =
& _T("DSN=ADOTest");
编程小技巧
去掉单文档的“无标题”
!CFrameWnd::PreCreateWindow(cs) )
&&return FALSE;
&// TODO: Modify the Window class or styles here
by modifying
&//& the CREATESTRUCT cs
&cs.style&&
~FWS_ADDTOTITLE;
&VC编程做个超级链接的文本按钮
VC下利用ADO连接Access数据库&
SQL语句VC中的分行&
pcmd-&CommandText & =
& "SELECT & * &
& FROM & OrderTable
& WHERE & OrderID
各种类型转换
常用数据类型使用转换详解
CString 转 int& atoi
CString to double
Cstring与double char 的转换
int(num+0.5)&& %.2f
查询Excel表要用$结尾不然找不到&
select *& FROM [Stockpool$]
数据库表中字段含有括号的话
用中括号括起来表示特殊字符 例如 [EPS(T+1)]
CListCtrl使用技巧&&&
打开网页文件
ShellExecute(hWnd,"open","ieexplorer",CString("file://")+filename
& + & CString("#a1"),
NULL,SW_SHOWNORMAL);&&&
深入浅出ShellExecute
&Excel中时间字段的查询:
Time&# 00:00:00#
&VC窗口自由的调整大小的实现
用VC++获取系统时间几种方法&
%Y%m%d%h%M%S 年月日 时分秒
就用CTime::GetDayOfWeek()&&
COleDateTime::::GetDayOfWeek()啊,他返回一个int,如果返回值是1就说明是星期天,如果是2表示星期一...如果是7表示星期六(每个星期的第一天是星期天)&
使用time_t time( time_t * timer )
&&&精确到秒
  计算时间差使用double difftime( time_t timer1, time_t
2 使用clock_t clock() 得到的是CPU时间
&&&精确到1/CLOCKS_PER_SEC秒
3 使用DWORD GetTickCount()
得到的是系统运行的时间&精确到毫秒
如果使用MFC的CTime类,可以用CTime::GetCurrentTime()&精确到秒
5 要获取高精度时间,可以使用
QueryPerformanceFrequency(LARGE_INTEGER
*lpFrequency)获取系统的计数器的频率
QueryPerformanceCounter(LARGE_INTEGER
*lpPerformanceCount)获取计数器的值
然后用两次计数器的差除以Frequency就得到时间。
6 还有David的文章中提到的方法:
&&& Multimedia
Timer Functions
following functions are used with multimedia timers.
timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
timeGetTime/timeKillEvent/TimeProc/timeSetEvent&
Q:GetTickCount()函数,说是毫秒记数,是真的吗,还是精确到55毫秒?
A:GetTickCount()和GetCurrentTime()都只精确到55ms(1个tick就是55ms)。如果要精确到毫秒,应该使用timeGetTime函数或QueryPerformanceCounter函数。具体例子可以参考、和。
Q:vc++怎样获取系统时间,返回值是什么类型的变量呢?&
GetSystemTime返回的是格林威志标准时间
GetLocalTime,和上面用法一样,返回的是你所在地区的时间,中国返回的是北京时间
VOID GetSystemTime(
LPSYSTEMTIME lpSystemTime // address of system time structure
函数就可以获得了,其中LPSYSTEMTIME 是个结构体
含:年,月,日,周几,小时,分,秒,毫秒。
Disable一个控件:GetDlgItem(IDC_BUTTON1)-&EnableWindow(FALSE);
VC中如何发布Release版本
工具栏上点右键,选择编译,将编译win32debug改为win32
Release即可。如果需要调试的话,还需要再改回来方可
VC程序可以再其它机子上运行:
你的目标程序需要动态链接库文件的支持,
把程序中用到的DLL文件放到程序的目录下就可以运行了。
project-&setting-&General-&下拉框中选择"Use
& MFC & in & a
& Static &
Library”
第一:private,
public, protected 访问标号的访问范围。
private:只能由1.该类中的函数、2.其友元函数访问。
不能被任何其他访问,该类的对象也不能访问。
protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。
但不能被该类的对象访问。
public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由4.该类的对象访问。
注:友元函数包括3种:设为友元的普通的非成员函数;设为友元的其他类的成员函数;设为友元类中的所有成员函数。
第二:类的继承后方法属性变化。
属性不能够被继承。使用private继承,父类的protected和public属性在子类中变为private;
使用protected继承,父类的protected和public属性在子类中变为protected;
使用public继承,父类中的protected和public属性不发生改变;&
如下所示:&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public:&&&&&&&&&&&
protected:&&&&&&
public继承&&&&&&&&&&&
&public&&&&&&&&&&&&&protected&&&&&&&
protected继承&&&&&&
protected&&&&&&
protected&&&&&&&
private继承&&&&&&&&&&&
private&&&&&&&&&&
private&&&&&&&&&&&&
protected继承和private继承能降低访问权限。
百分号的表示
用%%表示%&,或者CStrng
& str.format("select & *
& from & Name &
where & address & like
& %sabc%s","%","%");
viewform.cpp line 69 错误:
应该把dialog改为child。
取消所有断点
edit-&breakpoints-&remove all 或者
Ctrl+Shift+F9
设置checkBox属性为选中&&((CButton&&
*)GetDlgItem(IDC_CHECK1+i))-&SetCheck(1);&&
判断是否选中
 if(IsDlgButtonChecked(IDC_SEX1)) 
取得活动视图和主框架
&&CMainFrame&&
*pMainFrame=(CMainFrame&&
*)AfxGetMainWnd();&&
&&CSRSFormView&&
* pView& =(CSRSFormView
*)pMainFrame-&GetActiveView();
关于missing ';' before identifier
'A'& 两个文件的相互引用引起的...
VC中看不到类:删除clw文件 重新建立
获取控件的中心:GetDlgItem(IDC_SEARCH1)-&GetWindowRect(&rc);
rc.CenterPoint()
SendMessage 传递多个变量:
&&&&&&&&tObj
*fi=new tO
&&&&&&&&fi-&iItem=
&&&&&&&&fi-&iFolder=iSelF
&&&GetOwner()-&SendMessage(WM_OUTBAR_NOTIFY,
NM_OB_ITEMCLICK, (UINT)fi);
那边接收到后再用(tObj*)转换回来
问题:
请问何时用UpdateData(false),何时用UpdateData(true)呢?
答案:当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调用UpdateData(FALSE);如果你希望知道用户在对话框中到底输入了什么,就应该在访问变量前调用UpdateData(TRUE)。
设置控件标题&&&GetDlgItem(IDC_GetCapProfit)-&SetWindowText("全部显示");
DateTime change事件被执行二次的改进:
bOK=TRUE;&&
1//判断是否有CMonthCalCtrl,若有会发送两次Change,截第二次即可&&
&CDateTimeCtrl*&&
(CDateTimeCtrl*)&&
GetDlgItem(IDC_DATESELECTED);&&
&ASSERT(pCtrl&&
&CMonthCalCtrl*&&
pMoCalCtrl&&
pCtrl-&GetMonthCalCtrl();&&
&if(pMoCalCtrl&&
&if(bOK)&&
&&AfxMessageBox("");&&
& *pResult&&
无模式对话框:C dlg.Create(IDD_DIALOG1,this);
dlg.ShowWindow(SW_SHOW);
先为对话框加上2个radio
button,分别是Radio1和Radio2。
问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了?
关键是选上,“默认”只要放在OnInitDialog()即可。三种方法可以让它选上,
第一种:
*)GetDlgItem(IDC_RADIO1))-&SetCheck(TRUE);//选上
*)GetDlgItem(IDC_RADIO1))-&SetCheck(FALSE);//不选上
*)GetDlgItem(IDC_RADIO1))-&GetCheck();返回1表示选上,0表示没选上
第二种:
关联一个congtrol型变量(子类化),好ctrl+W(即打开classwizard),点开
Variables,咦?怎么没有IDC_RADIO1这个ID?原来是没有分组。因为radio
button通常都是成组使用的,在一组里面是互斥的。取消,回到对话框资源面板,右键Radio1查看属性把Group选上,那么,Radio1和Radio2就是一组了(怎么知道他们是一组的?后面说)。此时,就可以为Radio1增加一congtrol型变量m_ctrlRadio1了。如下:
m_ctrlRadio1.SetCheck(TRUE);
同样可以使用GetCheck()获取状态。
第三种:
关联一个int型变量(同样需要先分组)m_nRadio1,打开对话框构造函数,你会发现有:
m_nRadio1 =
-1;m_nRadio1别赋值-1表示哪个都没有选上。如果你把-1改成0,就会发现Radio1默认被选上了,依此类推,m_nRadio1的值为1就是第二个被选上了(这里同样有问题,哪个是第一个?哪个是第二个?)。获取状态很简单,UpdateData(TRUE)后判断m_nRadio1的值即可。
问题2:如何使用多组?
多组和一组是一样的使用,只要搞清楚哪个是哪一组的就行了。再为对话框添加Radio3和Radio4。很简单,先为这些Radio
Button排个顺序,就是排列他们的TAB
ORDER。在对话框资源面板上Ctrl+D,然后按你自己的理想顺序用鼠标逐个点击就可以了。不妨假设Radio1、Radio2、Radio3、Radio4分别是1、2、3、4。Radio1和Radio3都选上Group属性,那么&#是一组&#是另外一组,因为分组的原则是在选上Group属性的这一个开始直到碰到下一个选上Group属性的。你不妨再Ctrl+D,令Radio1、Radio2、Radio3、Radio4分别是1、3、2、4,那么Radio1和Radio3是一组,如果m_nRadio1=1,此时是Radio3被选上而不是Radio2被选上。分好了组就分别使用它们吧。
嗯,也许你还要为它们添加鼠标单击事件,非常简单。
一、对单“磁ソ蟹肿椋
每组的第一个单“磁ド柚檬粜裕篏roup,Tabstop,A其余按钮设置属性Tabstop,Auto。如:
Radio1、Radio2、Radio3为一组,Radio4、Radio5为一组
设定Radio1属性:Group,Tabstop,Auto
设定Radio2属性:Tabstop,Auto
设定Radio3属性:Tabstop,Auto
设定Radio4属性:Group,Tabstop,Auto
设定Radio5属性:Tabstop,Auto
二、用ClassWizard为单选控件定义变量,每组只能定义一个。如:m_Radio1、m_Radio4。
三、用ClassWizard生成各单“磁サ牡セ飨⒑⒓尤肽谌荩
void CWEditView::OnRadio1()
&&& m_Radio1 =
//第一个单“磁ケ谎≈
void CWEditView::OnRadio2()
&&& m_Radio1 =
//第二个单“磁ケ谎≈
void CWEditView::OnRadio3()
&&& m_Radio1 =
//第三个单“磁ケ谎≈
void CWEditView::OnRadio4()
&&& m_Radio4 =
//第四个单“磁ケ谎≈
void CWEditView::OnRadio5()
&&& m_Radio4 =
//第五个单“磁ケ谎≈
四、设置默认按钮:
在定义控件变量时,ClassWizard在构造函数中会把变量初值设为-1,只需把它改为其它值即可。
如:
&//{{AFX_DATA_INIT(CUnitBlockTypeFlankPublicAdd)
&m_Radio1 =
//初始时第一个单“磁ケ谎≈
&m_Radio4 =
//初始时第四个单“磁ケ谎≈
&//}}AFX_DATA_INIT
终止线程有三种途径
1.线程可以在自身内部调用AfxEndThread()来终止自身的运行;
&2.可以在线程的外部调用BOOL
TerminateThread( HANDLE hThread, DWORD dwExitCode
)来强行终止一个线程的运行,然后调用CloseHandle()函数释放线程所占用的堆栈
&3.改变全局变量,使线程的执行函数返回,则该线程终止。这种方法最安全。
全局函数调用: extern& UINT
ThreadFunc(LPVOID lpParam);
在VC中,如果我们想更新UI信息,我们一般调用UpdateData(FALSE),这在
窗口线程中调用是正确的,但如果在后台进程中这样调用主窗口的UpdateData(FALSE),则会出现问题,原因很简单:两个线程更新同一个窗口的UI信息,会引起UI的线程安全问题,当然也可以更多的线程。
我们可以借助消息机制,来实现多线程的UI更新问题。当线程要更新主窗口的UI时,发送一个自定义消息给主窗口,主窗口在消息处理中UpdateData(FALSE);
因为消息的处理采取队列形式,挨个处理,线程安全是肯定的!
.h文件:
afx_msg& LRESULT
OnUpdateData(LPARAM lParam, WPARAM
.cpp文件:
BEGIN_MESSAGE_MAP(CMainDlg, CDialog)
& ON_MESSAGE(WM_UPDATEDATA, OnUpdateData)
END_MESSAGE_MAP()
WM_UPDATEDATA&& WM_USER + 1
LRESULT OnUpdateData(LPARAM lParam, WPARAM wParam)
& return UpdateData(FALSE);
SendMessage(WM_UPDATEDATA)
SendMessageW(hMainWnd, WM_UPDATEDATA, 0, 0)
更改XP风格的程序:
The following steps introduces XP Theme Style to your
Insert Resource, choose "Custom", input "24" (without quotes)
as resource type
Copy and paste the following XML sheets into the editor.
&?xml version="1.0" encoding="UTF-8" standalone="yes"?&
xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0"&
&assemblyIdentity
processorArchitecture="x86"
version="5.1.0.0"
type="win32"
name="test.exe"/&
&description&Test Application&/description&
&dependency&
&dependentAssembly&
&assemblyIdentity
type="win32"
name="mon-Controls"
version="6.0.0.0"
publicKeyToken="ccf1df"
language="*"
processorArchitecture="x86"/&
&/dependentAssembly&
&/dependency&
&/assembly&
You can replace test.exe and Test
Application with any string you like. This will not affect
the behaviour of the application.
Change resource ID to 1.
Add calls to InitCommonControls() in your
WinMain(). Don't forget to include commctrl.h
and link comctl32.lib. Rebuild your project, all done
This special resource type is only recognized by Windows XP. In
any other version of Windows (Windows 9x/NT/2000), the program
simply runs as before.
You can also create a manifest file with the same name of the
EXE file, plus an extension .manifest, which contains the
same lines as the ones above. For our test.exe, the manifest
file is test.exe.manifest.
Excel中的NULL值,应该用ISNULL来判断
&sSql="select
Name,Code,Price,Date,Market,Total,[M_Weight(%)],[Re_Weight(%)],[PE(T)],[Profit(T)],[Profit(TTM)],[PE(TTM)]
from [HSsheet$] where ISNULL([GICS_4])& and
ISNULL([GICS_C4]) and Date='"+sDate+"'";
ComboBox的用法:&&&
&打开对话框并复制文件:
CFile & file;
& & & CString
& m_FileN &
CFileDialog &
m_FileOpen(FALSE,".mdb",NULL,OFN_OVERWRITEPROMPT,"Result
& Files(*.mdb)|*.mdb|所有文件(*.*)|*.*||");
if(m_FileOpen.DoModal()==IDOK){ &
m_FileName=m_FileOpen.GetPathName(); &
& & & CString
m_Path=m_FileName.Left(m_FileName.ReverseFind('\\'));
& & & CString
& strFileName="C:\\project\\Files\\Result.mdb";
& & & LPCTSTR
& lpNewFileName & =
& (LPCTSTR)(m_FileName); &
& a=CopyFile( &
(LPCTSTR)strFileName, & & //
& pointer & to &
name & of & an &
existing & file
m_FileName, & & //
& pointer & to &
filename & to & copy
& & & FALSE
& flag & for &
operation & if & file
& exists &
找到窗口中的控件:
& // & TODO:
& Add & your &
control & notification & handler
& code & here
& & & UINT
& k=WinExec("rundll32.exe &
shell32.dll,Control_RunDLL & desk.cpl",SW_SHOW);
if(k&32) &
& & & CString
x.Format("%d",k); &
MessageBox(x); & &
要在error后返回,下同 &
& & & HWND
& wd=::FindWindow(NULL,"显示 &
& (wd==NULL) &
MessageBox("Error1"); &
::ShowWindow(wd,SW_HIDE); &
& & & HWND
wtd=FindWindowEx(wd,NULL,"SysTabControl32",NULL);
& (wtd==NULL) &
MessageBox("Error2"); &
TabCtrl_SetCurFocus(wtd,2); &
& & & HWND
& wd1=FindWindowEx(wd,NULL,NULL,"外观");
& (wd1==NULL) &
MessageBox("Error3"); &
& & & HWND
& cb1=FindWindowEx(wd1,NULL,"ComboBox",NULL);
& (cb1==NULL) &
MessageBox("Error4"); &
::SendMessage(cb1,CB_SELECTSTRING,-1,(long)"淡绿色");
& & & long
& id=::GetDlgCtrlID(cb1); &
::SendMessage(wd1,WM_COMMAND, &
MAKELONG(id,CBN_SELCHANGE),(long)cb1); &
& & & HWND
& cb2=FindWindowEx(wd1,cb1,"ComboBox",NULL);
& (cb2==NULL) &
MessageBox("Error5"); &
//同上可在这修改项目 &
& 或其它属性 &
& & & HWND
& bb1=FindWindowEx(wd,NULL,NULL,"确定");
& (bb1==NULL) &
MessageBox("Error6"); &
id=::GetDlgCtrlID(bb1); &
::SendMessage(wd,WM_COMMAND, &
MAKELONG(id,BN_CLICKED),(long)bb1);&&
CTime或者COleDateTime,Format方法的使用
关键词:
COleDateTime&&&
Format&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
CTime ct = CTime::GetCurrentTime();
CString str = ct.Format("%Y-%m_%d %H-%M-%S");
输出为:str=" 15-21-30"
Abbreviated weekday name
Full weekday name
Abbreviated month name
Full month name
Date and time representation appropriate for locale
Day of month as decimal number (01 & 31)
Hour in 24-hour format (00 & 23)
Hour in 12-hour format (01 & 12)
Day of year as decimal number (001 & 366)
Month as decimal number (01 & 12)
Minute as decimal number (00 & 59)
Current locale's A.M./P.M. indicator for 12-hour clock
Second as decimal number (00 & 59)
Week of year as decimal number, with Sunday as first day of week
Weekday as decimal number (0 & 6; Sunday is
Week of year as decimal number, with Monday as first day of week
Date representation for current locale
Time representation for current locale
Year without century, as decimal number (00 &
Year with century, as decimal number
Either the time-zone name or time zone abbreviation, depending on
no characters if time zone is unknown
Percent sign
// Example for CTime::Format and CTime::FormatGmt
CTime t( , 22, 15, 0 );
// 10:15 PM March 19, 1999
CString s = t.Format( "%A, %B %d, %Y" );
ATLASSERT( s == "Friday, March 19, 1999" );
请问如何让vc程序在没有安装vc 机子上运行
&有三种方式可以解决
1:采用静态连接模式发布执行文件:这个alt+f9看设置
2:采用打包模式发布安装程序
3:就是采用DEPENDS.EXE工具(vc6自带的)打开执行文件,查看运行所需动态库,把这些都与执行文件放在一起发布
前两种如楼上几位说的
Double变量和分数相乘时候要注意1/4应该表示成1.0/4.
multimon.h头文件的include比较例外,格式如下:
#pragma comment(linker, "/FORCE:MULTIPLE")
#pragma comment(linker, "/OPT:NOREF")
#define COMPILE_MULTIMON_STUBS
#include "multimon.h"
一些常用的代码:
ListBox的使用:
响应CEdit控件的鼠标单击事件:
BOOL CStockDLG::PreTranslateMessage(MSG* pMsg)
&// TODO: Add your specialized code here and/or
call the base class
&switch(pMsg-&message)&&
WM_LBUTTONDOWN:
&&&CPoint&&
&&&GetCursorPos(&pt);&&
&&&ScreenToClient(&pt);
&&&GetDlgItem(IDC_STOCKID)-&GetWindowRect(&rect);
&&&ScreenToClient(&rect);
&&&if(rect.PtInRect(pt))
&PostMessage(WM_OPENSSDLG,0,0);
&return CDialog::PreTranslateMessage(pMsg);
PreTranslateMessage中不能使用domodal的原因:&
mfc的PreTranslateMessage是由一个全局函数AfxInternalPreTranslateMessage来执行的,这个函数是不可重入的,也就是不能嵌套调用。
你在PreTranslateMessage中DoModal,那么DoModal中又有自己的消息循环,必然会导致AfxInternalPreTranslateMessage的重入。&&&
&解决方法:
void & CMyWnd::OnKeyUp(UINT &
nChar,UINT & nRepCnt,UINT &
CWnd::OnKeyUp(nChar,nRepCnt,nFlags); &
& & & if(nChar
& == & VK_SPACE)
& & CChsRollDlg
& & dlg.DoModal();
& 改成这样 &
& void & CMyWnd::OnKeyUp(UINT
& nChar,UINT & nRepCnt,UINT
& nFlags) &
CWnd::OnKeyUp(nChar,nRepCnt,nFlags); &
& & & if(nChar
& == & VK_SPACE)
& & PostMessage
& (WM_USER, & 0,
& // & WM_USER的消息函数
& void & CMyDlg::OnUser
CChsRollDlg & &
dlg.DoModal(); &
屏蔽Dialog的Enter和ESC键:
BOOL CAShareDlg::PreTranslateMessage(MSG* pMsg)
&// TODO: Add your specialized code here and/or
call the base class
&&& if(pMsg
-& message == WM_KEYDOWN)
if(pMsg -& wParam == VK_ESCAPE)
&&if(pMsg -&
wParam == VK_RETURN)
&return CDialog::PreTranslateMessage(pMsg);
点击对话框外面时候对话框关闭的方法:
if(!bActive)
&&if(!bOkClosed)
&&EndDialog(IDCANCEL);
WM_NCACTIVATE响应 &
& wParam参数为FALSE时关闭
一个很好用的CXFileDialog:
MFC学习总结 (90个技巧)
如何让没有TitleBar的对话框,能响应任务栏左键最小化事件以及任务栏右键菜单?
&ModifyStyle(0,&&
WS_SYSMENU);
&ModifyStyle(0,&&
WS_MINIMIZEBOX);&&
运行Dos命令并判断其运行结束:
&STARTUPINFO&&
&PROCESS_INFORMATION&&
&ZeroMemory(&&
sizeof(si)&&
sizeof(si);&&
&ZeroMemory(&&
sizeof(pi)&&
&si.dwFlags&&
STARTF_USESHOWWINDOW;&&&&
//设置隐藏执行窗口&&
&si.wShowWindow&&
SW_HIDE;&&
CreateProcess(NULL,&&
(char*)(LPCTSTR)strCmd,&&
&while(true)
&&if(WaitForSingleObject(pi.hProcess,0)==WAIT_OBJECT_0)
Vector的序列化:
& copy(vi.begin(), & vi.end(),
ostream_iterator&int&(...));
...省略号处可以改为ofstream的话,就将vi对象中的各个值存入ofstream所帮定的文件对象;
& copy(istream_iterator(ifstream(...)),
ifstream_iterator(ifstream_iterator&int&
& eof, & back_insert(vi)
此处是从文件中顺序读入vi的值,并且使用back_insert()方法&&&&&&
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 如何退出while循环 的文章

 

随机推荐