随笔分类 - WinSdk!
摘要:网上看到有些人是自己封装了一些中断函数,比如调用__asm{INT 21H};等。突然想到,可以直接用C++语言本身提供的try..catch语句啊。FOOL -.-写了一个测试类:#pragma once#include #include using namespace std;class CTestClass{public: CTestClass(UINT64 qwPosBegin, UINT64 qwPosEnd) { try { INT64 qwSize = (INT64)(qwPosEnd - qwPosBegin); ...
阅读全文
摘要:打印格式:__int64 %I64dunsigned __int64 %I64uWindows下做了一些封装:INT64 UINT64_snprintf_s swprintfstrcpy wcscpy wcscpyhttp://msdn.microsoft.com/zh-cn/library/kk6xf663.aspx长度计算: strlen wcslen _tcslen
阅读全文
摘要:唉,不能道听途说,"assert()在Release模式也会起作用的",需要自己动手测试才行。下面的测试证明:assert函数在Release模式是不会起作用的。测试类CTestClass:#pragma once#include #include using namespace std;class CTestClass{public: CTestClass(UINT iPosBegin, UINT iPosEnd) { m_iPosBegin = iPosBegin; m_iPosEnd = iPosEnd; m_iExpectSize ...
阅读全文
摘要:一般来说,实现URL Redirect的过程是这样的:1.给Server发一个被Redirect的URL2.Server的返回值如果是301(永久转移)或其他相关值,就证明你刚才访问的URL被重定向了,这时接收重定向到URL继续发送请求现实中可能存在多次重定向的URL,这时候如果不断去请求被重定向的URL的话,可能会面临超时的问题。解决方法还没想过。使用WinINet的HttpQueryInfo+HTTP_QUERY_LOCATION时返回12150(Server找不到指定的字段),应该是你必须请求一个可以重定向的URL才能接收到吧。不过也挺奇怪的:你返回空也行啊,为什么直接函数执行失败呢。参
阅读全文
摘要:绝对路径转相对路径可以使用:PathRelativePathTo相对路径转绝对路径好像没有现成的。可以考虑 GetCurrentDirectory GetModuleFileName PathStripPath 等。问题描述:需要根据Path来判断它属于那个分区。但是不支持相对路径。目标: 支持相对路径和绝对路径。解决方法:char GetDriveName(LPWSTR lpszPath){ //we assume that the lpszPath passed in is valid, if not, Results Not Guaranteed. WCHAR szBuffe...
阅读全文
摘要:一般来说,类UNIX系统中使用的是正斜杠,如/etc Windows系统则使用的是反斜杠\但是在Windows上编程经常要使用两个反斜杠,如C:\\Windows唉,究其原因,是设计Windows的人为了与UNIX系统区分开,故意将正斜杠改成了反斜杠。而他没有考虑到反斜杠同时也是C++的转义字符,因此早期Windows系统中的文件名是不能含有空格的,而Unix则可以很好的通过转义字符\来指定。比如cd MyDir\ MyThing命令行会正确的辨认出"MyDir MyThing"并进入这个目录。当然,现在Windows的后续版本已经使用其它方法(比如文件名用双引号括住)解决
阅读全文
摘要:void main(){ const int ARRAY_LEN = 20; char szPathTest[][ARRAY_LEN] = {"C:\\What.nani", "Why.nani", ".\\Where.nani", "..\\When.nani", "...How.nani", "?Why.nani", "...\\How.nani" }; int len = sizeof(szPathTest) / sizeof(szPathTest[
阅读全文
摘要:MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/aa385351%28v=vs.85%29.aspxQuery Info FlagsThe following lists contain the attributes and modifiers used by HttpQueryInfo and QueryInfo.The attribute flags are used by HttpQueryInfo (or QueryInfo) to indicate what data to retrieve. Most of
阅读全文
摘要:#include #pragma comment(lib,"wininet.lib")using namespace std;void CrackUrl(){#define MAX_LEN 100 URL_COMPONENTS uc; WCHAR Scheme[MAX_LEN]; WCHAR HostName[MAX_LEN]; WCHAR UserName[MAX_LEN]; WCHAR Password[MAX_LEN]; WCHAR UrlPath[MAX_LEN]; WCHAR ExtraInfo[MAX_LEN]; uc.dwStr...
阅读全文
摘要:KEY: UTF-16.至少在我的Windows平台+vs2008使用sizeof(WCHAR)已测试就知道了。引用9楼的回复:由实现定义:ISOC++112.3/3...Theexecutioncharactersetandtheexecutionwide-charactersetareimplementation-definedsupersetsofthebasicexecutioncharactersetandthebasicexecutionwide-ch……没看懂,不过确定的是微软的编译器是UTF-16《windows核心编程》ANSIandUnicodeCharacterandSt
阅读全文
摘要:可以的。所以,以下代码就不正确了(修改:PROCESSOR_ARCHITECTURE_AMD64虽然看起来很硬件,但其实是一个软件层次上的tag,而且下面的代码没有问题): if (osvi.dwMajorVersion >= 6) { if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) Result = Result + " 64-bit"; else if (si.wProcessorArchitecture == ...
阅读全文
摘要:#define offsetof(s, m) (size_t)&(((s*)0)->m)注意:"&"这里是取地址符的意思,而不是位运算的与,害的我郁闷了很长时间。。说到底,一种欺骗战术。offsetof 求某个结构体的特定成员在结构体里面的偏移量(s *)0 是骗编译器说有一个指向类(或结构)s的指针,其值为0 &((s *)0)->m 是要取得类s中成员变量m的地址 由于这个类(或结构)的基址为0,这时m的地址当然就是m在s中的偏移了(s *)0 是把0地址转换为s指针类型,然后从这个指针上“取”m成员再取址,而m成员的地址转换后结果就
阅读全文
摘要:DLL搜索顺序:当前进程的可执行模块所在的目录。当前目录。Windows系统目录。GetSystemDirectory函数检索此目录的路径。Windows目录。GetWindowsDirectory函数检索此目录的路径。PATH环境变量中列出的目录。因此,放到以上任意一个目录下都可以。最简单的是第1个,放到exe文件所在的目录下
阅读全文
摘要:1. appwiz.cpl-->打开或关闭Windows功能-->Telnet客户端、服务器(只勾选客户端是看不到下一步中的telnet服务的)2. services.msc-->open telnet service.
阅读全文
摘要:问题:在父窗口中调用CTabCtrl控件的接口SetItemSel()不起作用。原因:调试发现,获取GetClientRect不起作用 因为窗口还没创建 要么说用CDialogImpl啊 有个OnInitDialog函数好办些这个时候只能给一些成员变量 复制 而不能调用函数(例如GetClientRect) 而且就算使用CDialogImpl 也可能出现这种情况解决方法:把设置当前选中的item接口分为内部(SetItemSel)、外部(SetCurSelItem)两种。 内部还负责重绘之类的,外部只负责传值。然后再OnPaint里面最后再调用一下内部的SetItemSel即可。当然内部这个接
阅读全文
摘要:所在项目中的定位是一个外观为圆角矩形的TabBtn控件,绘制圆角矩形部分的实现:void CTabBtn::DoPaint(CDCHandle dc)//继承了CDoubleBufferImpl{ Graphics graphics(dc); DrawTabBtn(&graphics);}void CTabBtn::DrawTabBtn(Graphics* graphics){ RECT rect; ::GetClientRect(m_hWnd, &rect); int nItemCount = m_arrItems.size(); int nItemWid...
阅读全文
摘要:WM_INITDIALOG 消息是对话框才能收到的消息,表明对话框及其所有子控件都创建完毕了。这个状态肯定是 调用显示对话框的函数之前。1函数原型来源于MSDN:Windows CE 3.0版本WM_INITDIALOG hwndFocus = (HWND) wParam;lInitParam = lParam;2参数hwndFocus接收默认键盘焦点的控件的句柄。系统分配默认键盘焦点,只有当对话框过程,则返回 TRUE。lInitParam指定额外的初始化数据。此数据是作为对用于创建对话框的 CreateDialogIndirectParam、 CreateDialogParam、 Dial
阅读全文
摘要:这个逻辑混乱的小弟真是一语中的^_^“小弟才学MFC不久 有个问题想问下高手在SDK风格的 程序中 总有一个逻辑顺序是 注册窗口类-创建窗口-显示窗口-更新窗口-消息循环 这些步骤但是用MFC AppWizard生成的代码 就完全的打乱了这些逻辑结构 我发现每个应用程序都有Oncreate()函数来响应WM_CREATE消息 这个函数就是用来创造窗口的吗 请问注册窗口在什么地方完成的呢 我知道显示窗口 更新窗口和消息循环在CWinApp派生的TheApp中的Initstance()中完成的 所以我的逻辑有点乱 哪个高手能详细和通俗的指教我下 谢谢”OnCreate函数这里相当于标准流程中的 C
阅读全文
摘要:只有Dialog类型的窗口才会响应WM_INITDIALOG, CWindowImpl所以不会响应WM_CREATE看来 有必要区别下 CWindowImpl CDialogImpl CFrameWindowImpl CAxDialogImpl 下。
阅读全文
摘要:最近在写一个控件CMenuButton,初衷是提供设置偏移量的接口,可是ASSERT总是中断,调试发现::GetClientRect()返回的rect都是0值。Google了一下,原来:Q:“为何在OnCreate调用取出的就是0 呢 ?在OnInitialUpdate中是可以调用的,返回数据也是正确的 ”A:“OnCreate时还没创建出客户区 ”void CMenuButton::SetOffset(int OffsetL, int OffsetR, int OffsetTop, int OffsetBottom){ //if out of client bound, then hold
阅读全文

浙公网安备 33010602011771号