re: 最近幾天被MFC折騰~ 萬(wàn)連文 2010-05-20 08:36
通過(guò)窗口消息能保證處理過(guò)程在本窗口創(chuàng)建的線程
1、大音希聲,大道無(wú)形,大智之人,不耽于形,不逐于力,不恃于技
2、用建議的方式而不是批評(píng)的方式對(duì)待他人的成果,這樣會(huì)更好
您說(shuō).h嘛? 如果是基于對(duì)話框編程直接添加activex就會(huì)生成,或者從dll導(dǎo)入類都行,前提是基于mfc開(kāi)發(fā),如果是win32可能需要原始.h,需要可以跟我聯(lián)系 wlwlxj@gmail.com
@forgot
OK,我已經(jīng)從首頁(yè)摘下來(lái)了,不過(guò)我還是要把自己的事情記錄下來(lái),我不太喜歡爭(zhēng)論,也不喜歡評(píng)論別人。
@forgot
我大部分時(shí)間都在學(xué)習(xí),都在寫代碼,研究windows代碼,只是不知道學(xué)多少算多,懂得多少算夠,進(jìn)什么公司算牛,做過(guò)什么大軟件才算有天賦,也不知道你是如何得出的"你這5年學(xué)的太少了",希望能夠指點(diǎn)。
是啊,該學(xué)的東西太多了,所以才感嘆自己的失敗。
@日番谷冬獅郎
誒,痛并快樂(lè)著,不過(guò)喜歡什么就做什么吧,興趣最重要。
哇,我一個(gè)同事也是跟你類似差不多。 .net轉(zhuǎn)C++都喜歡這個(gè)折疊功能,不過(guò)我就不太習(xí)慣很少使用。
re: 使MFC變漂亮二:MFC與HTML交互示例 萬(wàn)連文 2009-08-19 09:37
暈,看到你的截圖了,只是太冤枉我了,你確信使用的是我的控件? 那種惡作劇我還真想不出來(lái)啊。
re: 使MFC變漂亮二:MFC與HTML交互示例 萬(wàn)連文 2009-08-18 18:11
沒(méi)有吧,什么玩笑? 可能是IE版本差異,這個(gè)是老的IE6的內(nèi)核,后來(lái)MFC SDK對(duì)這個(gè)問(wèn)題支持的比較好了,就不用這么做了。
XTP的Skin模塊里面也有API的HOOK,做的也相當(dāng)不錯(cuò)
這個(gè)咚咚跟我看的pdlparse有點(diǎn)類似......
看似不錯(cuò),讓我想起研究生期間做地圖。 這地圖沒(méi)泄露機(jī)密吧,哈哈~~~~
遠(yuǎn)離boost一直是我時(shí)刻提醒自己的,講架構(gòu)、講對(duì)象模型比這些要來(lái)的更加務(wù)實(shí)。
re: Xindows的試用 萬(wàn)連文 2009-07-25 08:04
有2個(gè)是我的,一個(gè)是IE的,恰好在一起了,所以就截圖下來(lái)。GoLive_Hidden隱藏窗口主要是為后臺(tái)的消息轉(zhuǎn)發(fā)提供一個(gè)中間站,也恰好解決了托盤的Notify消息的麻煩;Xindow_Hidden是界面庫(kù)的隱藏窗口,是多線程調(diào)用核心對(duì)象方法的一個(gè)排隊(duì)隊(duì)列,以及庫(kù)全局消息轉(zhuǎn)發(fā)的中間站。庫(kù)不知道好不好用,有待于檢驗(yàn)和改善,如果能很好的使用,肯定會(huì)讓別人享用,當(dāng)然也有可能夭折,所以還是未知的。庫(kù)本身主要是想提供無(wú)窗口的界面支持,核心的有edit、select、list等通用控件以及文字排版和類似Div的一個(gè)布局器,支持activex控件,支持界面的Filter特效。目前來(lái)說(shuō)Filter還沒(méi)走通,整個(gè)庫(kù)的接口導(dǎo)出的不理想,內(nèi)部底層有很多雜亂的東西待清理。
re: 頂層窗口的Skin[未登錄](méi) 萬(wàn)連文 2009-07-23 07:22
那個(gè)是根據(jù)美工的圖片來(lái)確定的,沒(méi)有規(guī)律,就是把點(diǎn)坐標(biāo)起始和長(zhǎng)寬卡住就可以了。
這個(gè)是具體的代碼,有些可以確定的東西沒(méi)有必要去猜測(cè):
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: 閑暇時(shí)間做的幾個(gè)界面 萬(wàn)連文 2009-07-18 08:43
@23
你的這種認(rèn)為是基于快速開(kāi)發(fā)或者小應(yīng)用而言,對(duì)于大型應(yīng)用,C++在界面方面的積累足以使得后期開(kāi)發(fā)加速,“路遙知馬力”應(yīng)該是這種情況,當(dāng)然我不否認(rèn)其他RAD工具在界面開(kāi)發(fā)上的高效。
re: 頂層窗口的Skin 萬(wàn)連文 2009-07-10 10:05
看最后面的注釋:
注:VS2008開(kāi)發(fā),左鍵雙擊登錄窗口客戶區(qū)顯示主界面。代碼部分修改后可使用,但請(qǐng)不要使用圖片資源。
re: 頂層窗口的Skin 萬(wàn)連文 2009-07-09 12:56
當(dāng)鼠標(biāo)移動(dòng)到關(guān)閉等系統(tǒng)按鈕上時(shí),不會(huì)高亮顯示
這個(gè)是故意處理的,因?yàn)槲覀兊南到y(tǒng)里面inactive只有一種狀態(tài),所以沒(méi)有區(qū)分,就沒(méi)有做inactive的高亮
最小化之后程序掛掉?? 沒(méi)發(fā)現(xiàn)這個(gè)問(wèn)題
12個(gè)方位貼圖中,有一個(gè)錯(cuò)了。 左上的IA狀態(tài)搞成上左了,已經(jīng)修改,我說(shuō)怎么老是感覺(jué)inactive狀態(tài)左邊有一個(gè)小白點(diǎn),謝謝!
re: 頂層窗口的Skin 萬(wàn)連文 2009-07-09 12:37
@Touchsoft
是的,很久以前看過(guò),做的比較好,不過(guò)當(dāng)初還是發(fā)現(xiàn)一些不完美的地方。
re: 頂層窗口的Skin 萬(wàn)連文 2009-07-09 11:03
呃~~~,剛剛還說(shuō)滿意就發(fā)現(xiàn)問(wèn)題,主界面最小化后就會(huì)發(fā)生問(wèn)題,修改中......
已經(jīng)修改完畢,最小化的時(shí)候隱藏窗口(到托盤,過(guò)程沒(méi)有做),當(dāng)然最小化之后你就沒(méi)法關(guān)閉了,由于沒(méi)有做托盤部分顯示主窗口的編程,所以測(cè)試的時(shí)候只能殺掉進(jìn)程了。這樣應(yīng)該不會(huì)再有什么麻煩了。
re: 這幾個(gè)月的成果 萬(wàn)連文 2009-06-21 21:14
一個(gè)界面翻譯引擎,按照自己的想法加上一些現(xiàn)有的實(shí)現(xiàn),模擬類似Flash WPF這樣的界面框架,僅僅是猜想而已,不一定可以達(dá)到,重在學(xué)習(xí)的過(guò)程與積累的過(guò)程。
沒(méi)有仔細(xì)看,不過(guò)和wtl呢?還有一個(gè)做的大點(diǎn)的winx,還有一個(gè)HongSoft的模板插件框架? 如果能夠做幾個(gè)看得見(jiàn)的截圖和特性就更加明了了。
微軟的什么我沒(méi)有必要告訴你,crt的動(dòng)態(tài)庫(kù)我不曉得你怎么想,用dependency工具看看就曉得依賴不依賴了,我對(duì)自己的認(rèn)識(shí)也不是十足的把握。
因?yàn)槲沂强次④涍@么做的,自己確實(shí)沒(méi)有發(fā)現(xiàn)什么錯(cuò)誤,我沒(méi)法不承認(rèn)她的實(shí)現(xiàn)可以為我所用,可能就是中毒太深吧。您上面寫的那些已經(jīng)超出了我的知識(shí)范圍,我需要好好學(xué)習(xí)。至于 vc6不支持動(dòng)態(tài)crt庫(kù) 好像可以通過(guò)修改/MLd到/MDd實(shí)現(xiàn)。
感謝你的指導(dǎo), 我沒(méi)有說(shuō)跨平臺(tái), 也沒(méi)有說(shuō)實(shí)用多個(gè)編譯器,我一直使用VC系列工具在Windows上面寫程序,其他的編譯器和OS了解很少,對(duì)C++標(biāo)準(zhǔn)也研究不夠,出發(fā)點(diǎn)只是想找到一個(gè)經(jīng)過(guò)驗(yàn)證的(大的、成功的產(chǎn)品使用過(guò)的)簡(jiǎn)便的工具。 我想軟件工具都不是完美的,考慮太多就沒(méi)完沒(méi)了了,我堅(jiān)持實(shí)用原則。
因?yàn)榈讓訉?shí)現(xiàn)是Heap**操作,所以delete和delete[]都會(huì)調(diào)用HeapFree,所以恰好可以完成任務(wù)。
re: 高薪招聘 萬(wàn)連文 2009-05-27 08:09
流一下口水.....吸溜~~~~~
re: 甘特圖1.0.0β發(fā)布 萬(wàn)連文 2009-05-26 08:31
xgantt確實(shí)是這個(gè)行業(yè)的控件產(chǎn)品里面最優(yōu)秀的,功能很強(qiáng)大,毋庸置疑。在性能上面我覺(jué)得自己還是有把握的,功能方面根據(jù)自己的經(jīng)驗(yàn)慢慢優(yōu)化結(jié)構(gòu)增加功能點(diǎn),應(yīng)該會(huì)彌補(bǔ)差距。
re: 最近老是喝醉 萬(wàn)連文 2009-05-25 18:04
@小不點(diǎn) 外加另一個(gè)要控制網(wǎng)頁(yè)里面編輯框的網(wǎng)友
不好意思,我最近有點(diǎn)忙瘋了,事情太多,實(shí)在沒(méi)時(shí)間幫你們親手制作demo。但是我提供思路了,我知道這對(duì)于初學(xué)者無(wú)用,但是真不好意思,如果對(duì)你們很重要,沒(méi)有實(shí)現(xiàn)請(qǐng)過(guò)一段時(shí)間之后與我再次聯(lián)系。
網(wǎng)頁(yè)中嵌入自己的MFC對(duì)話框 假如是atl制作使用復(fù)合控件比較簡(jiǎn)單(等同對(duì)話框,但是不能使用mfc類了比較麻煩),mfc的activex只能自己create一個(gè)對(duì)話框到主控件上面,也可以嘗試formview視圖。
控制網(wǎng)頁(yè)里面編輯框,可以寫一個(gè)js函數(shù) function SetEditValue(val) { //dom控制 } 之后在C++里面call script具體參見(jiàn)我那篇文章。
阿彌托福,老衲已返璞歸真一年有余,早已遠(yuǎn)離team,不知何時(shí)再入俗沾塵重回team,輪回一次。善哉善哉!
是燈管的問(wèn)題,維修費(fèi)用大概是100左右,吾已經(jīng)被js敲詐一把,希望他人能吸取教訓(xùn)。燈管導(dǎo)致屏不亮是筆記本過(guò)保修期之后最容易出現(xiàn)的情況。
Sorry,不太清楚您的需求。對(duì)于你所說(shuō)的我暫時(shí)還沒(méi)有做過(guò)研究。不過(guò)你可以參考ie src里面reader模式下的函數(shù)過(guò)程去了解。
需要考慮多線程,否則太不安全了,沒(méi)有實(shí)際意義。
ACDK這個(gè)庫(kù)可以,不過(guò)比較大,使用C++語(yǔ)言按照java語(yǔ)言規(guī)范來(lái)實(shí)現(xiàn)的基礎(chǔ)庫(kù)。不過(guò)如果走到這一步,大可不比使用C++了。
一個(gè)好的想法,被演變成一口水貼,實(shí)在不該,兩個(gè)都好,各有各的長(zhǎng)短。爭(zhēng)論沒(méi)撒意思,都不是中國(guó)的OS。
本來(lái)是那么打算的,誰(shuí)知道一回家居然又可以啟動(dòng)了,矮,這下以后可得小心了,再不拿到公司用了,以延遲它的壽命。
不是,只是希望了解一下,吾主要是win下面做界面,希望了解之后以后寫代碼的時(shí)候稍微注意下移植性。
比較好的做法是誰(shuí)分配誰(shuí)釋放,api一般導(dǎo)出Create*** Delete*** 類一般添加接口DeleteThis,這個(gè)是我的做法,不曉得是否合理。
struct tagDBAttrs
{
long lA;
long lB;
...
long lN;
};
This is POD.
其實(shí)方法的調(diào)用是比較簡(jiǎn)單,不用去網(wǎng)上找資料。使用excel的marco編輯器記錄下想要的操作,之后查看vba代碼就知道如何使用代碼調(diào)用功能了。
re: LoadString的一些小用法 萬(wàn)連文 2008-12-17 23:24
看看VC的CString的LoadString的方法,可以自己封裝一個(gè)Win32版本的,你這個(gè)方法不是那么徹底解決問(wèn)題。
謝謝你的回復(fù),進(jìn)一步確認(rèn),as2 as3都支持這種語(yǔ)法,只是需要發(fā)布到flash player9版本以上(我測(cè)試的是這種發(fā)布方式)。
re: 研究幾個(gè)C/C++編譯器 萬(wàn)連文 2008-12-03 21:33
修改入口點(diǎn),release似乎8k。不過(guò)做開(kāi)發(fā),最好不用計(jì)較這些。
re: 我繪制的圓餅圖 萬(wàn)連文 2008-12-03 10:19
鋸齒問(wèn)題,使用gdiplus解決,不過(guò)不是大問(wèn)題。codeproject上面有很多不錯(cuò)的,可以參考。
re: 終于治好了 萬(wàn)連文 2008-11-26 10:38
1)freetype221.lib 和 freetype221_D.lib 一個(gè)release lib 一個(gè)debug lib。2)是我自己編譯的,如假包換。我似乎是vc8編譯的,沒(méi)有修改任何東西。這個(gè)庫(kù)很多版本我下載后都可以直接編譯幾乎沒(méi)有遇到過(guò)問(wèn)題,不曉得您為何編譯不過(guò)去。
re: 終于治好了 萬(wàn)連文 2008-11-22 17:16
從你的目錄看上去軟件安裝的有點(diǎn)亂, microsoft sdks\windows v6.0 不曉得你的開(kāi)發(fā)環(huán)境和platform sdk如何搭配的,我想可能是sdk本身混亂導(dǎo)致的錯(cuò)誤。
re: 終于治好了 萬(wàn)連文 2008-11-21 18:39
re: 終于治好了 萬(wàn)連文 2008-11-21 18:28
1、具體是何錯(cuò)誤呢?你只說(shuō)報(bào)錯(cuò)我也無(wú)辦法。
2、gnuWin32我沒(méi)有研究過(guò),不過(guò)據(jù)說(shuō)freetype可以通過(guò)減少一些模塊的編譯減少尺寸,估計(jì)需要查看config目錄下一些咚咚,具體沒(méi)有做過(guò)不敢瞎扯。還有一個(gè)原因可能它的是動(dòng)態(tài)庫(kù),你編譯的的是靜態(tài)庫(kù),因?yàn)殪o態(tài)庫(kù)包含很多函數(shù)指令也可能導(dǎo)致庫(kù)很大。Release和debug也有很大差別,請(qǐng)綜合考慮。
很早以前,為了幫助幾個(gè)臺(tái)灣大學(xué)生,曾經(jīng)找過(guò)一些code,完成了漢字的緩存、字符串的alpha渲染(似乎是,記不清楚了),如果以后用的著,可以找我索取。其實(shí)freetype我也只是當(dāng)時(shí)在學(xué)校寂寞的無(wú)聊,瞅了幾天,沒(méi)想到能幫助這么多人,真是善哉善哉。