在MFC中,双击鼠标单击事件会触发以下消息序列
因此,响应WM_LBUTTONDBCLK消息可以检测到双击.但如果我只是想检测一次单击如何区分它?
但只是查看WM_LBUTTONUP消息是不够的,因为它可能是单击,或者它可能是双击的第一次单击.
如何才能成功识别单击?
什么是解析字符串并提取数字和字母的最简单方法?我的字符串可以是以下格式(数字|字母或字母|数字),即"10A","B5","C10","1G"等.
我需要提取2个部分,即"10A" - >"10"和"A".
更新:感谢大家提供的所有优秀答案
我需要创建一个工业监控应用程序,向操作员显示SCADA图,类似于此
替代文本http://img32.imageshack.us/img32/631/processcontrol.png
有哪些工具包可用于执行此操作以及人们有哪些使用这些工具包的经验?我已经知道ilog takeit 但没有经验。
编辑:我不需要软件来控制硬件本身,我只需要创建显示流程当前状态的 GUI 或图表。
我正在学习lucene和ravendb上的绳索 - 我在Raven中有以下文件 -
{
"InternalEvent": {
"Desec": "MachineInfo: 1F8BFBFF000106A5_2103933941_00155D365607_WIN-UWJJ7OPR9TM_1, UserInfo: NT AUTHORITY\\LOCAL SERVICE_3, ProcessInfo: \\Device\\HarddiskVolume1\\Windows\\System32\\taskeng.exe, Pid: 5772, ObjInfo: , EventId: New Process Stopped",
"MachineInfo": "1F8BFBFF000106A5_2103933941_00155D365607_WIN-UWJJ7OPR9TM_1",
"UserInfo": "NT AUTHORITY\\LOCAL SERVICE_3",
"ProcessInfo": "\\Device\\HarddiskVolume1\\Windows\\System32\\taskeng.exe",
"Pid": 5772,
"ObjInfo": "",
"EventId": "New Process Stopped",
"Occured": "2011-08-08T23:25:31.8220000+01:00"
},
"Key": "6c4abf6a-156e-4224-8eac-72cde756b3c6"
}
Run Code Online (Sandbox Code Playgroud)
我正在查询数据库 -
var searchValue = "InternalEvent:Desec:(" + String.Join(" AND ", searchTerms) + ")";
var eventEntities = session.Advanced.LuceneQuery<EventCacheEntity>()
.WaitForNonStaleResultsAsOfLastWrite()
.Skip(0)
.Take(_pageLimit)
.Where(searchValue);
Run Code Online (Sandbox Code Playgroud)
搜索任何类似的东西,如果searchTerms只有一个术语,如机器,它肯定在字段desec.我究竟做错了什么?
我对lucene查询语法中的嵌套字段不太确定 - 即Internalevent:Desec ??
给定 2 个值,如下所示:
decimal a = 0.15m;
decimal b = 0.85m;
Run Code Online (Sandbox Code Playgroud)
其中a + b
总是1.0m
,两个值都只指定到小数点后 2 位,并且两个值都是>= 0.0m
和<= 1.0m
对于、和的所有可能的十进制值,是否保证始终为x == total
真?使用以下计算:x
a
b
decimal x = 105.99m;
decimal total = (x * a) + (x * b);
Run Code Online (Sandbox Code Playgroud)
或者是否存在x == total
只保留小数点后两位但不超过这一点的情况?
a
如果和b
可以指定为无限小数位(尽可能多Decimal
),但只要a + b = 1.0m
仍然成立,会有什么区别吗?
我的ASP.NET 4.0生产应用程序遇到重新发生的问题,导致站点由于超时错误而无响应.
以下是该应用程序的简要概述.该应用程序驻留在3台服务器上; Web服务器,应用服务器和运行SQL Server 2008的数据库服务器.所有服务器都在Windows Server 2008上运行.Web服务器驻留在公共域中.应用服务器驻留在DMZ中,通过端口80和443通过WCF在Web服务器之间进行开放式通信.数据库服务器驻留在私有域中,通过端口1433与应用服务器进行开放式通信.该应用程序已经生产了一段时间,并且只在上周经常遇到这些问题.没有代码更改,托管服务提供商表示最近没有对服务器进行任何更改.
在Web服务器上,应用程序遇到下面发布的错误(错误1).快速修复解决方案是重新启动应用服务器IIS进程,但是,这是一个反复出现的问题,并导致业务所有者出现重大中断.
应用程序的DAL使用Enterprise Library v4.1打开与数据库的连接.我已经包含了2个代码片段,负责启动呼叫(代码1和代码2).以各种其他方法重复该方法.ExecuteReader方法可能没有正确关闭连接吗?没有覆盖允许我指定ConnectionBehavior来关闭连接的方法.
我们执行了SQL配置文件分析,并确定没有与DB的延迟打开连接.
在研究问题的同时,有人建议企业库可能存在连接未被妥善处理的错误,但是在帖子上没有验证.如何确定问题的原因?或者解决问题的适当行动方案是什么?我可以增加池大小,但这似乎只是一个临时解决方案.
错误1:
***System.ServiceModel.FaultException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached. at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.SqlClient.SqlConnection.Open() at Microsoft.Practices.EnterpriseLibrary.Data.Database.GetNewOpenConnection() at Microsoft.Practices.EnterpriseLibrary.Data.Database.GetOpenConnection(Boolean disposeInnerConnection) at Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteReader(DbCommand command) at Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteReader(String storedProcedureName, Object[] parameterValues) at CityStoreDAL.NavigationProvider.GetNavigator(Int32 navigatorID) in c:\TFS\CityStore\DEV\SRC\CityStoreDAL\NavigationProvider.cs:line 41 at CityStoreBLL.Navigation.GetNavigator(Int32 navigatorID) in …
Run Code Online (Sandbox Code Playgroud) 我有一个字节数组,实际上是声卡的16位样本.因此,1000字节实际上代表500短(16位值).
目前我正在将它们转换为:
byte [] inputData = new byte[1000];
short [] convertedData = new short[500];
Buffer.BlockCopy(inputData, 0, convertedData , 0, 1000);
Run Code Online (Sandbox Code Playgroud)
它工作正常,它很快,因为它是一个低级字节副本.
但有没有办法在没有副本的情况下做到这一点?即告诉C#将这个内存区域视为500个短裤而不是1000个字节的数组?我知道在C/C++中我可以只是转换指针,它会起作用.
这个副本发生在一个紧密的循环中,每秒高达5000次,所以如果我可以删除副本,那将是值得的.
谁能解释这种行为?
var culture = new CultureInfo("da-DK");
Thread.CurrentThread.CurrentCulture = culture;
"daab".StartsWith("da"); //false
Run Code Online (Sandbox Code Playgroud)
我知道可以通过指定来修复它StringComparison.InvariantCulture
.但我只是对行为感到困惑.
我也知道丹麦不区分大小写的比较中"aA"和"AA"不一样,请参阅http://msdn.microsoft.com/en-us/library/xk2wykcz.aspx.这解释了这个
String.Compare("aA", "AA", new CultureInfo("da-DK"), CompareOptions.IgnoreCase) // -1 (not equal)
Run Code Online (Sandbox Code Playgroud)
这是否与第一个代码段的行为相关联?
我最常用的迷你图案是:
VideoLookup = new ArrayList { new ArrayList { buttonVideo1, "Video01.flv" },
new ArrayList { buttonVideo2, "Video02.flv" },
new ArrayList { buttonVideo3, "Video03.flv" },
new ArrayList { buttonVideo4, "Video04.flv" },
new ArrayList { buttonVideo4, "Video04.flv" }
};
Run Code Online (Sandbox Code Playgroud)
这意味着,不是每个按钮都有一个case的switch语句,而是只需将单击的按钮与ArrayList中的每个项目进行比较.然后,当我找到匹配时,我启动了正确的文件(尽管第二部分"查找"的操作可能是委托或其他任何事情).
主要的好处是我没有记住为每个switch语句添加所有正确代码的问题,我只是在查找ArrayList中添加一个新项.
(是的,我知道使用ArrayList不是最好的方法,但它是旧的代码.而且我知道每次循环遍历数组不如使用switch语句那么高效,但是此代码不在紧环)
是否有其他人使用任何迷你图案可以节省时间/精力或使代码更具可读性?它们不必仅与GUI相关.
更新:不要复制这段代码,我知道这很糟糕,但我没有意识到有多糟糕.请改用这样的东西.
Hashtable PlayerLookup = new Hashtable();
PlayerLookup.Add(buttonVideo1, "Video01.flv");
PlayerLookup.Add(buttonVideo2, "Video02.flv");
PlayerLookup.Add(buttonVideo3, "Video03.flv");
PlayerLookup.Add(buttonVideo4, "Video04.flv");
string fileName = PlayerLookup[currentButton].ToString();
Run Code Online (Sandbox Code Playgroud) 是否可以找到动态对象上当前存在的所有可用字段/属性?
我想对所有实现IDynamicMetaObjectProvider的对象执行此操作.使用GetDynamicMemberNames()是不合适的,因为它不必由自定义动态类完全实现,它只能返回一个空枚举.
我不想检查是否存在命名属性,即"Name"或"Id",但我想获得所有当前属性的列表,这可能吗?