re: 最近几天被MFC折腾~ 万连文 2010-05-20 08:36
通过窗口消息能保证处理过程在本窗口创建的线程
1、大音希声,大道无形,大智之人,不耽于形,不逐于力,不恃于技
2、用建议的方式而不是批评的方式对待他人的成果,这样会更好
re: 甘特图1.0.0β发布[未登录] 万连文 2010-01-10 19:10
您说.h嘛? 如果是基于对话框编程直接添加activex就会生成,或者从dll导入类都行,前提是基于mfc开发,如果是win32可能需要原始.h,需要可以跟我联系 wlwlxj@gmail.com
@forgot
OK,我已经从首页摘下来了,不过我还是要把自己的事情记录下来,我不太喜欢争论,也不喜欢评论别人。
@forgot
我大部分时间都在学习,都在写代码,研究windows代码,只是不知道学多少算多,懂得多少算够,进什么公司算牛,做过什么大软件才算有天赋,也不知道你是如何得出的"你这5年学的太少了",希望能够指点。
@日番谷冬狮郎
诶,痛并快乐着,不过喜欢什么就做什么吧,兴趣最重要。
哇,我一个同事也是跟你类似差不多。 .net转C++都喜欢这个折叠功能,不过我就不太习惯很少使用。
晕,看到你的截图了,只是太冤枉我了,你确信使用的是我的控件? 那种恶作剧我还真想不出来啊。
没有吧,什么玩笑? 可能是IE版本差异,这个是老的IE6的内核,后来MFC SDK对这个问题支持的比较好了,就不用这么做了。
XTP的Skin模块里面也有API的HOOK,做的也相当不错
这个咚咚跟我看的pdlparse有点类似......
看似不错,让我想起研究生期间做地图。 这地图没泄露机密吧,哈哈~~~~
re: 使用boost库需要一定的素质 万连文 2009-07-31 09:10
远离boost一直是我时刻提醒自己的,讲架构、讲对象模型比这些要来的更加务实。
re: Xindows的试用 万连文 2009-07-25 08:04
有2个是我的,一个是IE的,恰好在一起了,所以就截图下来。GoLive_Hidden隐藏窗口主要是为后台的消息转发提供一个中间站,也恰好解决了托盘的Notify消息的麻烦;Xindow_Hidden是界面库的隐藏窗口,是多线程调用核心对象方法的一个排队队列,以及库全局消息转发的中间站。库不知道好不好用,有待于检验和改善,如果能很好的使用,肯定会让别人享用,当然也有可能夭折,所以还是未知的。库本身主要是想提供无窗口的界面支持,核心的有edit、select、list等通用控件以及文字排版和类似Div的一个布局器,支持activex控件,支持界面的Filter特效。目前来说Filter还没走通,整个库的接口导出的不理想,内部底层有很多杂乱的东西待清理。
re: 顶层窗口的Skin[未登录] 万连文 2009-07-23 07:22
那个是根据美工的图片来确定的,没有规律,就是把点坐标起始和长宽卡住就可以了。
这个是具体的代码,有些可以确定的东西没有必要去猜测:
page , 132
subttl "RtlEnterCriticalSection"
;++
;
; NTSTATUS
; RtlEnterCriticalSection(
; IN PRTL_CRITICAL_SECTION CriticalSection
; )
;
; Routine Description:
;
; This function enters a critical section.
;
; Arguments:
;
; CriticalSection - supplies a pointer to a critical section.
;
; Return Value:
;
; STATUS_SUCCESS or raises an exception if an error occured.
;
;--
align 16
cPublicProc _RtlEnterCriticalSection,1
cPublicFpo 1,0
mov ecx,fs:PcTeb ; get current TEB address
mov edx,CriticalSection ; get address of critical section
cmp CsSpinCount[edx],0 ; check if spin count is zero
jne short Ent40 ; if ne, spin count specified
;
; Attempt to acquire critical section.
;
Lock1: ;
lock inc dword ptr CsLockCount[edx] ; increment lock count
jnz short Ent20 ; if nz, already owned
;
; Set critical section owner and initialize recursion count.
;
Ent10:
if DBG
cmp CsOwningThread[edx],0
je @F
stdCall _RtlpCriticalSectionIsOwned, <edx>
mov ecx,fs:PcTeb ; get current TEB address
mov edx,CriticalSection ; get address of critical section
@@:
endif ; DBG
mov eax,TbClientId + 4[ecx] ; get current client ID
mov CsOwningThread[edx],eax ; set critical section owner
mov dword ptr CsRecursionCount[edx],1 ; set recursion count
if DBG
inc dword ptr TbCountOfOwnedCriticalSections[ecx] ; increment owned count
mov eax,CsDebugInfo[edx] ; get debug information address
inc dword ptr CsEntryCount[eax] ; increment entry count
endif ; DBG
xor eax,eax ; set success status
stdRET _RtlEnterCriticalSection
;
; The critical section is already owned, but may be owned by the current thread.
;
align 16
Ent20: mov eax,TbClientId + 4[ecx] ; get current client ID
cmp CsOwningThread[edx],eax ; check if current thread is owner
jne short Ent30 ; if ne, current thread not owner
inc dword ptr CsRecursionCount[edx] ; increment recursion count
if DBG
mov eax,CsDebugInfo[edx] ; get debug information address
inc dword ptr CsEntryCount[eax] ; increment entry count
endif ; DBG
xor eax,eax ; set success status
stdRET _RtlEnterCriticalSection
;
; The critcal section is owned by another thread and the current thread must
; wait for ownership.
;
Ent30: stdCall _RtlpWaitForCriticalSection, <edx> ; wait for ownership
mov ecx,fs:PcTeb ; get current TEB address
mov edx,CriticalSection ; get address of critical section
jmp Ent10 ; set owner and recursion count
;
; A nonzero spin count is specified.
;
align 16
Ent40: mov eax,TbClientId + 4[ecx] ; get current client ID
cmp CsOwningThread[edx],eax ; check if current thread is owner
jne short Ent50 ; if ne, current thread not owner
;
; The critical section is owned by the current thread. Increment the lock
; count and the recursion count.
;
Lock6: ;
lock inc dword ptr CsLockCount[edx] ; increment lock count
inc dword ptr CsRecursionCount[edx] ; increment recursion count
if DBG
mov eax,CsDebugInfo[edx] ; get debug information address
inc dword ptr CsEntryCount[eax] ; increment entry count
endif ; DBG
xor eax,eax ; set success status
stdRET _RtlEnterCriticalSection
;
; A nonzero spin count is specified and the current thread is not the owner.
;
align 16
Ent50: push CsSpinCount[edx] ; get spin count value
Ent60: mov eax,-1 ; set comparand value
mov ecx,0 ; set exchange value
Lock7:
lock cmpxchg dword ptr CsLockCount[edx],ecx ; attempt to acquire critical section
jnz short Ent70 ; if nz, critical section not acquired
;
; The critical section has been acquired. Set the owning thread and the initial
; recursion count.
;
add esp,4 ; remove spin count from stack
mov ecx,fs:PcTeb ; get current TEB address
mov eax,TbClientId + 4[ecx] ; get current client ID
mov CsOwningThread[edx],eax ; set critical section owner
mov dword ptr CsRecursionCount[edx],1 ; set recursion count
if DBG
inc dword ptr TbCountOfOwnedCriticalSections[ecx] ; increment owned count
mov eax,CsDebugInfo[edx] ; get debug information address
inc dword ptr CsEntryCount[eax] ; increment entry count
endif ; DBG
xor eax,eax ; set success status
stdRET _RtlEnterCriticalSection
;
; The critical section is currently owned. Spin until it is either unowned
; or the spin count has reached zero.
;
; If waiters are present, don't spin on the lock since we will never see it go free
;
Ent70: cmp CsLockCount[edx],1 ; check if waiters are present,
jge short Ent76 ; if ge 1, then do not spin
Ent75: YIELD
cmp CsLockCount[edx],-1 ; check if lock is owned
je short Ent60 ; if e, lock is not owned
dec dword ptr [esp] ; decrement spin count
jnz short Ent75 ; if nz, continue spinning
Ent76: add esp,4 ; remove spin count from stack
mov ecx,fs:PcTeb ; get current TEB address
jmp Lock1 ;
stdENDP _RtlEnterCriticalSection
re: 闲暇时间做的几个界面 万连文 2009-07-18 08:43
@23
你的这种认为是基于快速开发或者小应用而言,对于大型应用,C++在界面方面的积累足以使得后期开发加速,“路遥知马力”应该是这种情况,当然我不否认其他RAD工具在界面开发上的高效。
re: 顶层窗口的Skin 万连文 2009-07-10 10:05
看最后面的注释:
注:VS2008开发,左键双击登录窗口客户区显示主界面。代码部分修改后可使用,但请不要使用图片资源。
re: 顶层窗口的Skin 万连文 2009-07-09 12:56
当鼠标移动到关闭等系统按钮上时,不会高亮显示
这个是故意处理的,因为我们的系统里面inactive只有一种状态,所以没有区分,就没有做inactive的高亮
最小化之后程序挂掉?? 没发现这个问题
12个方位贴图中,有一个错了。 左上的IA状态搞成上左了,已经修改,我说怎么老是感觉inactive状态左边有一个小白点,谢谢!
re: 顶层窗口的Skin 万连文 2009-07-09 12:37
@Touchsoft
是的,很久以前看过,做的比较好,不过当初还是发现一些不完美的地方。
re: 顶层窗口的Skin 万连文 2009-07-09 11:03
呃~~~,刚刚还说满意就发现问题,主界面最小化后就会发生问题,修改中......
已经修改完毕,最小化的时候隐藏窗口(到托盘,过程没有做),当然最小化之后你就没法关闭了,由于没有做托盘部分显示主窗口的编程,所以测试的时候只能杀掉进程了。这样应该不会再有什么麻烦了。
re: 这几个月的成果 万连文 2009-06-21 21:14
一个界面翻译引擎,按照自己的想法加上一些现有的实现,模拟类似Flash WPF这样的界面框架,仅仅是猜想而已,不一定可以达到,重在学习的过程与积累的过程。
没有仔细看,不过和wtl呢?还有一个做的大点的winx,还有一个HongSoft的模板插件框架? 如果能够做几个看得见的截图和特性就更加明了了。
微软的什么我没有必要告诉你,crt的动态库我不晓得你怎么想,用dependency工具看看就晓得依赖不依赖了,我对自己的认识也不是十足的把握。
因为我是看微软这么做的,自己确实没有发现什么错误,我没法不承认她的实现可以为我所用,可能就是中毒太深吧。您上面写的那些已经超出了我的知识范围,我需要好好学习。至于 vc6不支持动态crt库 好像可以通过修改/MLd到/MDd实现。
感谢你的指导, 我没有说跨平台, 也没有说实用多个编译器,我一直使用VC系列工具在Windows上面写程序,其他的编译器和OS了解很少,对C++标准也研究不够,出发点只是想找到一个经过验证的(大的、成功的产品使用过的)简便的工具。 我想软件工具都不是完美的,考虑太多就没完没了了,我坚持实用原则。
因为底层实现是Heap**操作,所以delete和delete[]都会调用HeapFree,所以恰好可以完成任务。
re: 高薪招聘 万连文 2009-05-27 08:09
流一下口水.....吸溜~~~~~
re: 甘特图1.0.0β发布 万连文 2009-05-26 08:31
xgantt确实是这个行业的控件产品里面最优秀的,功能很强大,毋庸置疑。在性能上面我觉得自己还是有把握的,功能方面根据自己的经验慢慢优化结构增加功能点,应该会弥补差距。
re: 最近老是喝醉 万连文 2009-05-25 18:04
@小不点 外加另一个要控制网页里面编辑框的网友
不好意思,我最近有点忙疯了,事情太多,实在没时间帮你们亲手制作demo。但是我提供思路了,我知道这对于初学者无用,但是真不好意思,如果对你们很重要,没有实现请过一段时间之后与我再次联系。
网页中嵌入自己的MFC对话框 假如是atl制作使用复合控件比较简单(等同对话框,但是不能使用mfc类了比较麻烦),mfc的activex只能自己create一个对话框到主控件上面,也可以尝试formview视图。
控制网页里面编辑框,可以写一个js函数 function SetEditValue(val) { //dom控制 } 之后在C++里面call script具体参见我那篇文章。
阿弥托福,老衲已返璞归真一年有余,早已远离team,不知何时再入俗沾尘重回team,轮回一次。善哉善哉!
re: 笔记本显示器不亮,有人遇见过吗?? 万连文 2009-03-27 23:21
是灯管的问题,维修费用大概是100左右,吾已经被js敲诈一把,希望他人能吸取教训。灯管导致屏不亮是笔记本过保修期之后最容易出现的情况。
re: 技术实现思路备忘录 万连文 2009-02-21 21:57
Sorry,不太清楚您的需求。对于你所说的我暂时还没有做过研究。不过你可以参考ie src里面reader模式下的函数过程去了解。
re: 自己写内存泄露检测库 万连文 2009-01-23 23:55
需要考虑多线程,否则太不安全了,没有实际意义。
re: 提问: 可以根据字符串创建类吗 万连文 2009-01-10 20:59
ACDK这个库可以,不过比较大,使用C++语言按照java语言规范来实现的基础库。不过如果走到这一步,大可不比使用C++了。
一个好的想法,被演变成一口水贴,实在不该,两个都好,各有各的长短。争论没撒意思,都不是中国的OS。
re: 笔记本显示器不亮,有人遇见过吗?? 万连文 2008-12-29 21:43
本来是那么打算的,谁知道一回家居然又可以启动了,矮,这下以后可得小心了,再不拿到公司用了,以延迟它的寿命。
re: linux学习一:wchar输出 万连文 2008-12-29 10:38
不是,只是希望了解一下,吾主要是win下面做界面,希望了解之后以后写代码的时候稍微注意下移植性。
比较好的做法是谁分配谁释放,api一般导出Create*** Delete*** 类一般添加接口DeleteThis,这个是我的做法,不晓得是否合理。
re: 简单的属性结构设计 万连文 2008-12-28 09:33
struct tagDBAttrs
{
long lA;
long lB;
...
long lN;
};
This is POD.
其实方法的调用是比较简单,不用去网上找资料。使用excel的marco编辑器记录下想要的操作,之后查看vba代码就知道如何使用代码调用功能了。
re: LoadString的一些小用法 万连文 2008-12-17 23:24
看看VC的CString的LoadString的方法,可以自己封装一个Win32版本的,你这个方法不是那么彻底解决问题。
谢谢你的回复,进一步确认,as2 as3都支持这种语法,只是需要发布到flash player9版本以上(我测试的是这种发布方式)。
re: 研究几个C/C++编译器 万连文 2008-12-03 21:33
修改入口点,release似乎8k。不过做开发,最好不用计较这些。
re: 我绘制的圆饼图 万连文 2008-12-03 10:19
锯齿问题,使用gdiplus解决,不过不是大问题。codeproject上面有很多不错的,可以参考。
re: 终于治好了 万连文 2008-11-26 10:38
1)freetype221.lib 和 freetype221_D.lib 一个release lib 一个debug lib。2)是我自己编译的,如假包换。我似乎是vc8编译的,没有修改任何东西。这个库很多版本我下载后都可以直接编译几乎没有遇到过问题,不晓得您为何编译不过去。
re: 终于治好了 万连文 2008-11-22 17:16
从你的目录看上去软件安装的有点乱, microsoft sdks\windows v6.0 不晓得你的开发环境和platform sdk如何搭配的,我想可能是sdk本身混乱导致的错误。
re: 终于治好了 万连文 2008-11-21 18:39
re: 终于治好了 万连文 2008-11-21 18:28
1、具体是何错误呢?你只说报错我也无办法。
2、gnuWin32我没有研究过,不过据说freetype可以通过减少一些模块的编译减少尺寸,估计需要查看config目录下一些咚咚,具体没有做过不敢瞎扯。还有一个原因可能它的是动态库,你编译的的是静态库,因为静态库包含很多函数指令也可能导致库很大。Release和debug也有很大差别,请综合考虑。
很早以前,为了帮助几个台湾大学生,曾经找过一些code,完成了汉字的缓存、字符串的alpha渲染(似乎是,记不清楚了),如果以后用的着,可以找我索取。其实freetype我也只是当时在学校寂寞的无聊,瞅了几天,没想到能帮助这么多人,真是善哉善哉。