2006年11月14日
#
大家都做過基于MFC Dialog的應(yīng)用程序,我更喜歡用CFrameWnd派生類來實(shí)現(xiàn)應(yīng)用程序的主框架,我不太喜歡SDI模板,又是Document又是View的,MFC背著你干了很多事情!
好了,說說問題,大家如果作過基于CFrameWnd的主窗口,可能會(huì)發(fā)現(xiàn)主窗口會(huì)有一個(gè)3D的邊框,一開始我用ModifyStyle發(fā)現(xiàn)不行,那就在PreCreateWindow里面吧!呵呵,也不管用,跟進(jìn)MFC的代碼,發(fā)現(xiàn)CFrameWnd::PreCreateWindow會(huì)重置dwExStyle,好了看代碼吧!
BOOL?CMainFrame::PreCreateWindow(CREATESTRUCT
&
?cs)?
{
??BOOL?bRet
=
CFrameWnd::PreCreateWindow(cs);
??
if
(bRet)
{
???cs.dwExStyle
&=~
WS_EX_CLIENTEDGE;
???
return
?TRUE;
?}
?
return
?FALSE;
}
2006年9月27日
#
好象還是有點(diǎn)不開心,大概搞TMD 軟件每天都有解決不完的問題,尤其象我這種不知道天高地厚的人更是如此!
牢騷要發(fā),也得繼續(xù)搞,屏幕捕獲的算法終于優(yōu)化出來了,下一步是用ASF Container把數(shù)據(jù)包裝起來,效果應(yīng)該不錯(cuò),我有點(diǎn)搞不明白的是AVI的索引為什么那么慢,數(shù)據(jù)量大是一方面,關(guān)鍵還是數(shù)據(jù)組織上存在缺陷,不如MPEG4!
如果順利,應(yīng)該在10月份就可以拿出一個(gè)象樣的版本的錄制軟件了,應(yīng)該可以斃掉一批垃圾錄屏軟件了,這是我希望看到的!
下面的事情還很多,每個(gè)都?jí)蚩械模疫€得多些耐心,少些焦慮,也希望認(rèn)識(shí)一些朋友大家一塊合作!
2006年9月18日
#
我要開始征途了,也許前面是坦途或荊棘,這已經(jīng)都不重要了,更多在于我的機(jī)會(huì)也許只能在此征途體現(xiàn)了,如果失敗,也許就意味著我在IT行業(yè)的徹底顛覆,我認(rèn)了!
我把自己blog定為行勝于言,意義就在這里,我的計(jì)劃開始了,從今天開始!
2006年7月24日
#
大家開發(fā)網(wǎng)絡(luò)程序,經(jīng)常要連接其他主機(jī),如果在xp上運(yùn)行,一定會(huì)提示你,只有選擇解除阻止才能實(shí)現(xiàn)正常的網(wǎng)絡(luò)連接.那么有沒有辦法在防火墻的例外列表里面通過編程的方式加入自己的程序呢?
?當(dāng)然有了,不然就不要介紹了
xp的系統(tǒng)目錄下面有個(gè)hnetcfg.dll就是這個(gè)編程接口,頭文件是netfw.h,初始化代碼如下:
INetFwProfile* m_pFireWallProfile=NULL;
HRESULT?hr?
=
?S_FALSE;
????INetFwMgr
*
?fwMgr?
=
?NULL;
????INetFwPolicy
*
?fwPolicy?
=
?NULL;

????FW_ERROR_CODE?ret?
=
?FW_NOERROR;
????
try
????
{
????????
if
(?m_pFireWallProfile?)
????????????
throw
?FW_ERR_INITIALIZED;

????????
//
?Create?an?instance?of?the?firewall?settings?manager.
????????hr?
=
?CoCreateInstance(?__uuidof(NetFwMgr),?NULL,?CLSCTX_INPROC_SERVER,?__uuidof(?INetFwMgr),?(
void
**
)
&
fwMgr?);

????????
if
(?FAILED(?hr?))
????????????
throw
?FW_ERR_CREATE_SETTING_MANAGER;

????????
//
?Retrieve?the?local?firewall?policy.
????????hr?
=
?fwMgr
->
get_LocalPolicy(?
&
fwPolicy?);
????????
if
(?FAILED(?hr?))
????????????
throw
?FW_ERR_LOCAL_POLICY;

????????
//
?Retrieve?the?firewall?profile?currently?in?effect
????????hr?
=
?fwPolicy
->
get_CurrentProfile(?
&
m_pFireWallProfile?);
????????
if
(?FAILED(?hr?))
????????????
throw
?FW_ERR_PROFILE;

????}
????
catch
(?FW_ERROR_CODE?nError)

????
{
????????ret?
=
?nError;
????}
????
if
(?fwPolicy?)
????????fwPolicy
->
Release();
????
if
(?fwMgr?)
????????fwMgr
->
Release();

????
return
?ret;
將程序名稱加入例外列表:
WinXPSP2FireWall::AddApplication(?const?wchar_t*?lpszProcessImageFileName,?const?wchar_t*?lpszRegisterName?)


{
????FW_ERROR_CODE?ret?=?FW_NOERROR;
????HRESULT?hr;
????BOOL?bAppEnable;
????BSTR?bstrProcessImageFileName?=?NULL;
????BSTR?bstrRegisterName?=?NULL;
????INetFwAuthorizedApplication*?pFWApp?=?NULL;
????INetFwAuthorizedApplications*?pFWApps?=?NULL;

????try

????
{
????????if(?m_pFireWallProfile?==?NULL?)
????????????throw?FW_ERR_INITIALIZED;
????????if(?lpszProcessImageFileName?==?NULL?||?lpszRegisterName??==?NULL?)
????????????throw?FW_ERR_INVALID_ARG;

????????//?First?of?all,?check?the?application?is?already?authorized;
????????FW_ERROR_CODE??nError?=?this->IsAppEnabled(?lpszProcessImageFileName,?bAppEnable?);
????????if(?nError?!=?FW_NOERROR?)
????????????throw?nError;

????????//?Only?add?the?application?if?it?isn't?authorized
????????if(?bAppEnable?==?FALSE?)

????????
{
????????????//?Retrieve?the?authorized?application?collection
????????????hr?=?m_pFireWallProfile->get_AuthorizedApplications(?&pFWApps?);
????????????if(?FAILED(?hr?))
????????????????throw?FW_ERR_AUTH_APPLICATIONS;

????????????//?Create?an?instance?of?an?authorized?application
????????????hr?=?CoCreateInstance(?__uuidof(NetFwAuthorizedApplication),?NULL,?CLSCTX_INPROC_SERVER,?__uuidof(INetFwAuthorizedApplication),?(void**)&pFWApp);
????????????if(?FAILED(?hr?))
????????????????throw?FW_ERR_CREATE_APP_INSTANCE;

????????????//?Allocate?a?BSTR?for?the?Process?Image?FileName
????????????bstrProcessImageFileName?=?SysAllocString(?lpszProcessImageFileName?);
????????????if(?SysStringLen(?bstrProcessImageFileName?)?==?0)
????????????????throw?FW_ERR_SYS_ALLOC_STRING;

????????????//?Set?the?process?image?file?name
????????????hr?=?pFWApp->put_ProcessImageFileName(?bstrProcessImageFileName?);
????????????if(?FAILED(?hr?)?)
????????????????throw?FW_ERR_PUT_PROCESS_IMAGE_NAME;

????????????//?Allocate?a?BSTR?for?register?name
????????????bstrRegisterName?=?SysAllocString(?lpszRegisterName?);
????????????if(?SysStringLen(?bstrRegisterName?)?==?0)
????????????????throw?FW_ERR_SYS_ALLOC_STRING;
????????????//?Set?a?registered?name?of?the?process
????????????hr?=?pFWApp->put_Name(?bstrRegisterName?);
????????????if(?FAILED(?hr?))
????????????????throw?FW_ERR_PUT_REGISTER_NAME;
????????????
????????????//?Add?the?application?to?the?collection
????????????hr?=?pFWApps->Add(?pFWApp?);
????????????if(?FAILED(?hr?))
????????????????throw?FW_ERR_ADD_TO_COLLECTION;
????????}
????}
????catch(?FW_ERROR_CODE?nError?)

????
{
????????ret?=?nError;
????}

????SysFreeString(?bstrProcessImageFileName?);
????SysFreeString(?bstrRegisterName?);

????if(?pFWApp?)
????????pFWApp->Release();
????if(?pFWApps?)
????????pFWApps->Release();

????return?ret;
}
2006年7月22日
#
現(xiàn)今的即時(shí)通信軟件都實(shí)現(xiàn)了音頻、視頻互通的功能,這得益于視頻編碼技術(shù)的應(yīng)用,目前市面上Microsoft 有MPEG4 v3,DIVX,XVID等等不一而足,但目前市場(chǎng)上好象對(duì)用戶桌面錄制技術(shù)關(guān)注不夠,因?yàn)榇蠹抑雷烂鎴D象和運(yùn)動(dòng)圖象是不一樣的,這也造成優(yōu)秀的桌面錄制軟件非常缺乏。
為什么要討論桌面壓縮呢?因?yàn)槠饝?yīng)用領(lǐng)域非常廣泛,第一他用在課件制作技術(shù)方面,可以完整還原教師的培訓(xùn)過程,尤其是操作類培訓(xùn)的課程更有實(shí)際意義。第二桌面共享依賴于桌面壓縮技術(shù),更好的壓縮效率和質(zhì)量將使得低帶寬下的高質(zhì)量桌面共享成為可能?
大家都知道桌面壓縮技術(shù)的實(shí)現(xiàn)可以基于RLE或HUFFMAN或其他更高級(jí)的算法進(jìn)行實(shí)現(xiàn),如何實(shí)現(xiàn)更為優(yōu)秀的回放效果和質(zhì)量,是目前這些方法所不能解決的。
同時(shí),為了兼容應(yīng)用需求,錄制的輸出格式也有很多要求,比如實(shí)現(xiàn)網(wǎng)上點(diǎn)播、錄制成ASF格式等。
在最近一段時(shí)間的開發(fā)過程和實(shí)現(xiàn)過程中,我嘗試了一些新的方法,取得了一些突破,但離自己最終的想法還有一定距離,如果大家感興趣的話,可以到我的網(wǎng)站下載:屏蹤幻影,由于目前軟件還不是非常完善,所以目前還無法公開代碼,在后續(xù)的時(shí)間里我會(huì)公開程序結(jié)構(gòu)和內(nèi)部代碼實(shí)現(xiàn)。
希望大家對(duì)我的軟件實(shí)現(xiàn)提出建議和修改意見。
2006年7月6日
#
?音量調(diào)節(jié)是實(shí)現(xiàn)互聯(lián)網(wǎng)語音通信的重要環(huán)節(jié),很多公司自行實(shí)現(xiàn)了有關(guān)音量調(diào)節(jié)的向?qū)?無奈水平各異,千差萬別.微軟公司也給出了解決方案,不過是在RTC實(shí)現(xiàn),需要安裝RTC運(yùn)行時(shí).
?? 今天給大家介紹的使用DirectX中有關(guān)DirectVoice中的實(shí)現(xiàn)來解決我們的問題:
//http://www.handytech.cn
#include <dvoice.h>
#pragma? comment(lib,"dxguid.lib")
void CTestDlg::OnButton1()
{
?// TODO: Add your control notification handler code here
?IDirectPlayVoiceTest* pTest;
?HRESULT hr=CoCreateInstance(CLSID_DirectPlayVoiceTest,NULL,CLSCTX_INPROC_SERVER,IID_IDirectPlayVoiceTest,(void**)&pTest);
?if(SUCCEEDED(hr))
?{
??pTest->CheckAudioSetup(&DSDEVID_DefaultVoicePlayback,&DSDEVID_DefaultCapture,NULL,DVFLAGS_ALLOWBACK);
??pTest->Release();
?}
? OK上面的代碼就調(diào)用了DirectVoice中的實(shí)現(xiàn),大家看看效果!?
?