MFC中,如何识别已经搭建好的mfc 屏蔽系统菜单中各...

MFC中如何安全的创建和关闭线程-c/c++-电脑编程网MFC中如何安全的创建和关闭线程作者:westcruelty 和相关&&&在MFC中安全的创建并关闭线程
//SomeClass.h
class SomeClass{
public:
& SomeClass();
protected:& CWinThread* m_pCoolingT& HANDLE m_hCoolingThreadB& HANDLE m_hCoolingThreadShutdownEvent& BOOL m_bCoolingThreadA& static UINT CoolingThread(LPVOID lParam);& BOOL StartCoolingThread(LPVOID lParam);& BOOL KillCoolingThread();
};
//SomeClass.cpp
SomeClass::SomeClass()
{
& & m_pCoolingThread = NULL;&& &m_hCoolingThreadBackup = NULL;& & m_hCoolingThreadShutdownEvent = NULL;& & m_bCoolingThreadAlive = FALSE;
}
BOOL SomeClass::StartCoolingThread(LPVOID lParam){
& KillCoolingThread();
& //创建线程结束事件,你也可以用其他方式结束线程
& m_hCoolingThreadShutdownEvent&= CreateEvent(NULL, TRUE, FALSE, NULL);& try{&&& m_pCoolingThread = AfxBeginThread(CoolingThread, lParam, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);  &&& if(!m_CoolingThread){  &&&&& throw CString(_T("Can\'t begin CoolingThread"));&&& }&&& ::DuplicateHandle(GetCurrentProcess(), m_pCoolingThread-&m_hThread,&&&&& GetCurrentProcess(), &m_hCoolingThreadBackup , 0,&&&&& FALSE,&&&&& DUPLICATE_SAME_ACCESS);&&& m_pCoolingThread-&ResumeThread();
& }& catch(CString str){&&& AfxMessageBox(str);&&& return FALSE;& }& return TRUE;}
BOOL SomeClass::KillCoolingThread(LPVOID lParam){& if(m_bCoolingThreadAlive && m_hCoolingThreadShutdownEvent && m_hCoolingThreadBackup){&&& DWORD dwExitCode = 0;
&&& //设置线程结束事件为有信号,或其他结束线程的方式
&&&&SetEvent(m_hCoolingThreadShutdownEvent);&&& do{&&&&& ::GetExitCodeThread(m_hCoolingThreadBackup, &dwExitCode);
&&&&& //设置线程结束事件为有信号,或其他结束线程的方式&&&&& SetEvent(m_hCoolingThreadShutdownEvent);&&&&& Sleep(20);&&& }while(ExitCode == STILL_ACTIVE);
&& m_hCoolingThreadBackup = NULL;
& CloseHandle( m_hCoolingThreadShutdownEvent);
&& m_hCoolingThreadShutdownEvent&= NULL;& }& return TRUE;}
UINT SomeClass::CoolingThread(LPVOID lParam){& CSafeThreadDlg* pIns = (CSafeThreadDlg*)lP& pIns-&m_bCoolingThreadAlive = TRUE;
& while(1)& {&&& /** ...you code ... */&&& DWORD dwEvent = ::WaitForSingleObject(pIns-&m_hCoolingThreadShutdownEvent, 1);&&& if(dwEvent == WAIT_OBJECT_0) {&&&&&&&& }& }
& pIns-&m_bCoolingThreadAlive = FALSE;& return 0L;}相关资料:|||||||MFC中如何安全的创建和关闭线程来源网络,如有侵权请告知,即处理!编程Tags:                &                    c#建立的mfc工程,点击Ctrl+F5运行后,
怎么查看 Debug.Print()和Console.print的输出?
vs2005里面c#建立的mfc工程,点击Ctrl+F5运行后,
怎么查看 console.writeln()
、Debug.Print()和Console.print的输出?我找不到打印这些数据的控制台mfc工程里面,找不到打印console.writeln() 的控制台
VS05版本这样设置:解决方案资源管理器-》你的项目-》点击右键-》属性-》点击“应用程序”选项卡-》右面“输出类型”那个下拉列表框-》控制台应用程序
不太明白&C#建立的mfc工程&是什么意思啊?请问你是怎样建立的呢?
如果你的程序中有Console.Write等方法,那么运行的时候他自己就会显示一个控制台窗口!
用vs2005建立一个c# window应用程序,代码:
private void button2_Click(object sender, EventArgs e)
FileStream fs = File.OpenRead(&h:/hi.txt&);
byte[] myByte=ReadFully(fs);
string myStr = Encoding.ASCII.GetString(myByte);
MessageBox.Show(myStr);
Console.WriteLine(&readfile&);
}但是我在vs2005控制台看不到
Console.WriteLine(&readfile&); 的输出,只能用MessageBox.Show(myStr);配合调试。请问 Console.WriteLine()输出到哪里了?有其他函数让字符串输出到控制台吗?
明白你的意思了,这个可以设置的,这样设置:
解决方案资源管理器-》你的项目-》点击右键-》属性-》通用属性-》常规-》输出类型-》控制台应用程序-》确定
这样就可以显示控制台窗口了,实际上默认是输出到“输出窗口”了!
明白你的意思了,这个可以设置的,这样设置:
解决方案资源管理器-》你的项目-》点击右键-》属性-》通用属性-》常规-》输出类型-》控制台应用程序-》确定没找到这个选项,你能截个图上来吗?
VS05版本这样设置:解决方案资源管理器-》你的项目-》点击右键-》属性-》点击“应用程序”选项卡-》右面“输出类型”那个下拉列表框-》控制台应用程序
Microsoft 正在进行一项网上调查,以了解您对 Msdn 网站的意见。如果您选择参加,我们将会在您离开 Msdn 网站时向您显示该网上调查。是否要参加?
<input type="hidden" id="hdnTrackerText" value="请不要关闭此窗口。谢谢!完成访问时,调查将显示在此处,所以请不要关闭此窗口。" />后使用快捷导航没有帐号?
查看: 3848|回复: 11
怎么样用VS2005创建一个支持MFC的WIN32智能设备项目?
在线时间0 小时
TA的帖子TA的资源
一粒金砂, 积分 10, 距离下一级还需 190 积分
我用VS2005写mobile6程序.
看例子里面的程序格式,应该是创建的windows应用程序,因为代码里面有winmain和wndproc之类的函数,却没有MFC的那一大堆类。但在资源里面的对话框里面点击,也可以添加一个继承CDialog的MFC类。
我的创建方法:建立项目--智能设置--win32智能设备项目--windows应用程序(这时候不能选择MFC)。到我在资源里面为一个对话框建立类的时候,也不能用MFC基类。
问题处在哪里了呢?例子明明可以的。
在线时间1 小时
TA的帖子TA的资源
我只会小用EVC而已
VS2005嵌入式相关的有本教程不错,是汪兵写的。建议楼主找来看看,很多例子。
在线时间0 小时
TA的帖子TA的资源
应该选择支持MFC的应用程序类型
在线时间0 小时
TA的帖子TA的资源
新建项目--智能设备--MFC智能设备应用程序(不要选win32智能设备项目)
在线时间0 小时
TA的帖子TA的资源
引用 3 楼 biaozai06 的回复:
新建项目--智能设备--MFC智能设备应用程序(不要选win32智能设备项目)
这种的我看到了啊,不用用MFC创建的项目会产生一大堆东西,而那个示例里面的代码是跟WIN32产生的差不多的。
在线时间0 小时
TA的帖子TA的资源
没有什么方法可以在WIN32项目里面用MFC吗?
在线时间0 小时
TA的帖子TA的资源
不好意思,刚才理解错了
试试这种方法:
第一步、在代码中包含MFC需要用到的头文件
#include &stdafx.h&
#include &afx.h&
第二步、设置WIN32项目属性:在项目常规选项页中设置“MFC的使用”
在线时间11 小时
TA的帖子TA的资源
我用的是VS2005英文版,在New Project中选择VC++-&Smart Device-&MFC Smart Device Application,输入项目名,点击确定进入到MFC Smart Device Application Wizard对话框,在Platform页选择你的程序运行的平台,比如PocketPC2003、Smartphone2003之类的。接下来的Application Type页中你可以选择Application Type:
& &single document
& &dialog based
& &single document with doclist
可以复选Document/View architecture surpport,在右侧Use of MFC你可以选择
& &Use MFC in a shared DLL
& &Use MFV in a statical library
接下去的几页都是对项目就行配置的,跟VC++ 6.0 MFC项目的配置基本相同,很容易看明白
在线时间0 小时
TA的帖子TA的资源
提示: 作者被禁止或删除 内容自动屏蔽
在线时间0 小时
TA的帖子TA的资源
建立项目--智能设置--win32智能设备项目--(windows应用程序)这里应该选MFC智能设备应用程序,你的没有?
在线时间0 小时
TA的帖子TA的资源
引用 6 楼 biaozai06 的回复:
不好意思,刚才理解错了
试试这种方法:
第一步、在代码中包含MFC需要用到的头文件
#include &stdafx.h&
#include&&&afx.h&
第二步、设置WIN32项目属性:在项目常规选项页中设置“MFC的使用”
我觉得这一种方法可以,试一下吧
在线时间1 小时
TA的帖子TA的资源
学习了。。。。。。。。。
Powered by
逛了这许久,何不进去瞧瞧?MFC中消息映射表格是如何建立起来的?
阅读《深入浅出MFC》中,讲到MFC的消息映射表格比窗口函数设计的更模块化、一般化。建立的步骤&br&
1.定义一个MSGMAP_ENTRY 结构和一个 dim 宏&br&&div class=&highlight&&&pre&&code class=&language-text&&struct MSGMAP_ENTRY {
LONG (*pfn) (HWND, UINT, WPARAM, LPARAM);
// 处理数据的方法
#define dim(x) (sizeof(x)
/ sizeof(x[0]))
&/code&&/pre&&/div&
2.第二步:组织数组: _messageEntries[]&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&k&&struct&/span& &span class=&n&&MSGMAP_ENTRY&/span& &span class=&n&&_messageEntries&/span&&span class=&p&&[]&/span& &span class=&o&&=&/span&
&span class=&p&&{&/span&
&span class=&n&&WM_CREATE&/span&
&span class=&p&&,&/span&
&span class=&n&&OnCreate&/span&&span class=&p&&,&/span&
&span class=&n&&WM_PAINT&/span&
&span class=&p&&,&/span&
&span class=&n&&OnPaint&/span&&span class=&p&&,&/span&
&span class=&p&&......&/span&
&span class=&p&&....&/span&
&span class=&p&&....&/span&
&span class=&p&&...&/span&
&span class=&p&&};&/span&
&/code&&/pre&&/div&
3.处理的时候使用for循环&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&k&&for&/span& &span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&n&&i&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span& &span class=&n&&i&/span& &span class=&o&&&&/span& &span class=&n&&dim&/span&&span class=&p&&(&/span&&span class=&n&&_messageEntries&/span&&span class=&p&&);&/span& &span class=&n&&i&/span&&span class=&o&&++&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&message&/span& &span class=&o&&==&/span& &span class=&n&&_messageEntries&/span&&span class=&p&&.&/span&&span class=&n&&nMessage&/span&&span class=&p&&)&/span&
&span class=&k&&return&/span& &span class=&p&&((&/span&&span class=&o&&*&/span&&span class=&n&&_messageEntries&/span&&span class=&p&&.&/span&&span class=&n&&pfn&/span&&span class=&p&&)(&/span&&span class=&n&&hWnd&/span&&span class=&p&&,&/span& &span class=&n&&message&/span&&span class=&p&&,&/span& &span class=&n&&WParam&/span&&span class=&p&&,&/span& &span class=&n&&lParam&/span&&span class=&p&&));&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&
【疑惑】第三步是如何建立起来一一对应的关系?&br&
例如:&div class=&highlight&&&pre&&code class=&language-text&& _messageEntries[0].nMessage == WM_CREATE == message
&/code&&/pre&&/div&
函数怎么就return对应的OnCreate处理函数?&br&
这个过程是如何实现的?&br&
WM_CREATE的处理函数的ID号码也应该是: i+1 啊&br&
是后面的那个的嘛! 也应该是:(*_messageEntries[i+1].pfn)
阅读《深入浅出MFC》中,讲到MFC的消息映射表格比窗口函数设计的更模块化、一般化。建立的步骤
1.定义一个MSGMAP_ENTRY 结构和一个 dim 宏struct MSGMAP_ENTRY {
LONG (*pfn) (HWND, UINT, WPARAM, LPARAM);
// 处理数据的方法
#define dim(x) (sizeof(x)
/ sizeof(x[0]))
2.第二步:组织数组: _messageEntries[]struct MSGMAP_ENTRY _messageEntries[] =
3.处理的时候使用for循环…
这个过程是如何实现的?首先应该了解的是:1.一般消息处理函数接受所有消息然后在函数内分开处理(sdk开发中)。而消息映射表格只是将不同的消息分开多个函数处理,这些分开的函数参数都是一样的,于是我们可以使用指针函数找到对应的消息处理函数。2._messageEntries[] 是一个MSGMAP_ENTRY 数组。也就说假如:struct MSGMAP_ENTRY _messageEntries[] =
OnCreate}那么_messageEntries里面只有一个MSGMAP_ENTRY(而非两个),即_messageEntries[0].nMessage是WM_CREATE,_messageEntries[0].pfn是OnCreate。 3.MSGMAP_ENTRY中有一个消息和其对应的消息处理函数指针。故找到消息就可以调用对应的那个函数。故消息进来的时候就循环判断是哪个消息,如WM_CREATE消息进来(_messageEntries[0].nMessage == WM_CREATE),循环中i=0就得到了,即找到了数组中消息所对应的 _messageEntries[0],故我们调用其pfn所指向的函数即可。 即: ((*_messageEntries.pfn[i])(hWnd, message, WParam, lParam));WM_CREATE的处理函数的ID号码也应该是: i+1 啊见2,依旧是i,因为WM_CREATE,OnCreate是同一个MSGMAP_ENTRY 的。

我要回帖

更多关于 mfc qq模拟聊天系统 的文章

 

随机推荐