博瑞博客

青春是一个充满活力的季节,即便是我们失去了天使的翅膀,只要我们还有一颗青春的心,那么我们的生活依然能够如阳光般灿烂!......
推荐阅读站长精心推荐阅读
现在位置:首页 >
  • C++的post请求(使用的是CInternetSession)

    C++的post请求(使用的是CInternetSession)

    C/C++  11-7  2012浏览  0评论  

    // WebPost.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" //int _tmain(int argc, _TCHAR* argv[]) //{ // return 0; //} #include <iostream> #include <string> #include <afxinet.h> //定义了MFC CInternetSession类等 bool PostHttpPage(const CString& hostName, const CString& pathName, const std::string& postData) { using namespace std; CInternetSession session(_T("your app agent name")); try { INTERNET_PORT nPort = 80; DWORD dwRet = 0; CHttpConnection* pServer = session.GetHttpConnection(hostName, nPort); CHttpFile* pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST, pathName); CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded"); // 请求头 //开始发送请求 pFile->SendRequest(strHeaders,(LPVOID)postData.c_str(),postData.size()); pFile->QueryInfoStatusCode(dwRet); if (dwRet == HTTP_STATUS_OK) { CString result, newline; while(pFile->ReadString(newline)) { //循环读取每行内容 result += newline+"\r\n"; } std::cout<<result<<std::endl;//显示返回内容 } else { return false; } delete pFile; delete pServer; } catch (CInternetException* pEx) { //catch errors from WinInet TCHAR pszError[200]; pEx->GetErrorMessage(pszError, 200); std::cout<<pszError<<std::endl;//显示异常信息 return false; } session.Close(); return true; } int main(void) { //向http://current.sinaapp.com/post.php发送数据 PostHttpPage(_T("current.sinaapp.com"),_T("post.php"),"name=rain&age=12"); }

  • jquery无刷新请求ajax

    jquery无刷新请求ajax

    Javascript  10-28  812浏览  0评论  

    jquery ajax请求的详细用法,ajax的好处就是不用刷新页面就能做到局部数据更新的效果,常见的地方比如,用户注册检测有没有重名,无刷新上传文件,提交数据等。 $.ajax({ url:'test.php?type=1&id='+id, //url带参数 type:'GET', //请求方式 cache:false, //缓存 success: function(data){ //请求成功后返回数据data $('body').html(data); } }); $.ajax({ url:'test.php, //请求url地址 type:'POST', //请求方式 cache:false, //缓存 dataType:'text', //数据类型 data:{ //请求的数据参数 type:1, name:test, sex:1 }, success: function(data){ //请求成功后返回数据data $('body').html(data); } error:function(){ alert('请求出错'); } });    

  • c++获取屏幕分辨率

    c++获取屏幕分辨率

    C/C++  10-9  1417浏览  0评论  

    获取屏幕分辨率: DEVMODE DevMode; EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &DevMode); DevMode.dmPelsWidth; DevMode.dmPelsHeight; 获取屏幕分辨率(不包含任务栏): int  cx = GetSystemMetrics(SM_CXFULLSCREEN); int  cy = GetSystemMetrics(SM_CYFULLSCREEN); --------------------- 作者:星星test 来源:CSDN 原文:https://blog.csdn.net/a3845021/article/details/54894594?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!

  • WM_NCHITTEST有21种取值

    WM_NCHITTEST有21种取值

    C/C++  10-9  960浏览  0评论  

    常用的有HTCAPTION,HTCLIENT,HTBORDER,HTSYSMENU,HTTRANSPARENT,罗列所有VCL里对其使用的情况 我为了移动一个无标题栏的窗体,使用了WM_NCHITTEST消息,这个消息大概如下: 通常,我们拖动对话框窗口的标题栏来移动窗口,但有时候,我们想通过鼠标在客户区上拖动来移动窗口。 一个容易想到的方案是,处理鼠标消息WM_LBUTTONDOWN和WM_LBUTTONUP。在OnLButtonUp函数中计算鼠标位置的变化,调用MoveWindow实现窗口的移动。 注意,拖动标题栏移动窗口的时候,会出现一个矩形框,它提示了窗口移动的当前位置。当鼠标左键放开的时候,窗口就移动到矩形框所在位置。而我们的实现方案中没有这个功能。 要实现此功能,我们必须自己来画这些矩形。 事实上,我们没有必要自己来做这件事情,因为Windows已经给我们做好了。 试想,如果我能够欺骗Windows,告诉它现在鼠标正在拖动的是标题栏而不是客户区,那么窗口移动操作就由Windows来代劳了。 要欺骗Windows并不像想像中的困难,甚至非常简单。 我们利用一个消息:WM_NCHITTEST。 MSDN对它的解释是: The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the message is sent to the window that has captured the mouse. 这个消息是当鼠标移动或者有鼠标键按下时候发出的。 Windows用这个消息来做什么? “HITTEST”就是“命中测试”的意思,WM_NCHITTEST消息用来获取鼠标当前命中的位置。 WM_NCHITTEST的消息响应函数会根据鼠标当前的坐标来判断鼠标命中了窗口的哪个部位,消息响应函数的返回值指出了部位,例如它可能会返回HTCAPTION,或者HTCLIENT等。(其返回值有很多,请查阅MSDN)。 为了便于理解,我先描述一下Windows对鼠标键按下的响应流程: 1. 确定鼠标键点击的是哪个窗口。Windows会用表记录当前屏幕上各个窗口的区域坐标,当鼠标驱动程序通知Windows鼠标键按下了,Windows根据鼠标的坐标确定它点击的是哪个窗口。 2. 确定鼠标键点击的是窗口的哪个部位。Windows会向鼠标键点击的窗口发送WM_NCHITTEST消息,来询问鼠标键点击的是窗口的哪个部位。(WM_NCHITTEST的消息响应函数的返回值会通知Windows)。通常来说,WM_NCHITTEST消息是系统来处理的,用户一般不会主动去处理它(也就是说,WM_NCHITTEST的消息响应函数通常采用的是Windows默认的处理函数)。 3. 根据鼠标键点击的部位给窗口发送相应的消息。例如:如果WM_NCHITTEST的消息响应函数的返回值是HTCLIENT,表示鼠标点击的是客户区,则Windows会向窗口发送WM_LBUTTONDOWN消息;如果WM_NCHITTEST的消息响应函数的返回值不是HTCLIENT(可能是HTCAPTION、HTCLOSE、HTMAXBUTTON等),即鼠标点击的是非客户区,Windows就会向窗口发送WM_NCLBUTTONDOWN消息。 我们有必要详细讨论一下:如果WM_NCHITTEST的消息响应函数的返回值是HTCAPTION,即指示了鼠标点击了标题栏,接下去Windows的处理是怎样的? 上面已经提到,接下来,Windows会向窗口发送WM_NCLBUTTONDOWN消息。 MSDN对WM_NCLBUTTONDOWN消息描述如下: WM_NCLBUTTONDOWN nHittest = (INT) wParam; // hit-test value pts = MAKEPOINTS(lParam); // position of cursor WM_NCLBUTTONDOWN的wParam指示了鼠标点击的窗口部位,lParam指示了当前鼠标的坐标。 如果应用程序没有对该消息响应,则由系统默认处理。 系统默认处理又是怎样的呢?系统发现wParam指示了鼠标点击的是标题栏,就会标识当前窗口处于“拖拽状态”(Windows内部记录了每个窗口的状态信息)。由于标识了“拖拽状态”,则从此刻起到鼠标键放开之前,你的鼠标移动状况完全由Windows跟踪。它根据鼠标的移动,使得窗口作“同步”移动。 注意,这个过程中,窗口不会收到WM_NCMOUSEMOVE消息,因为窗口和鼠标是“同步”移动的,你的鼠标相对于窗口是静止的。 但问题同时也出现了, 我想在右键这个窗体的时候弹出一个菜单, 当我完成 MSG_WM_RBUTTONDOWN 这个消息的时候,发现窗体收不到这个消息, 将WM_NCHITTEST消息的实现去掉就可以了,看了一原因是: 因为你在WM_NCHITTEST中处理了鼠标消息,把他定位成HTCAPTION,也就是鼠标在标题栏上,而标题栏属于非客户区(NC); 非客户区的事件消息都是以WM_NC开头的。也就是说,当你的WM_NCHITTEST返回HTCAPTION时,原来可以用WM_LBUTTONUP处理的消息,你只能用WM_NCLBUTTONUP来处理。 解决方法: 同时处理WM_NCHITTEST和WM_NCRBUTTONUP,而不处理WM_RBUTTONUP http://www.cnblogs.com/GnagWang/archive/2010/09/12/1824394.html ----------------------------------------------------------------------- · HTBORDER 在不具有可变大小边框的窗口的边框上。  · HTBOTTOM 在窗口的水平边框的底部。  · HTBOTTOMLEFT 在窗口边框的左下角。   · HTBOTTOMRIGHT 在窗口边框的右下角。   · HTCAPTION 在标题条中。   · HTCLIENT 在客户区中。   · HTERROR 在屏幕背景或窗口之间的分隔线上(与HTNOWHERE相同,除了Windows的DefWndProc函数产生一个系统响声以指明错误)。   · HTGROWBOX 在尺寸框中。   · HTHSCROLL 在水平滚动条上。   · HTLEFT 在窗口的左边框上。   · HTMAXBUTTON 在最大化按钮上。   · HTMENU 在菜单区域。   · HTMINBUTTON 在最小化按钮上。   · HTNOWHERE 在屏幕背景或窗口之间的分隔线上。   · HTREDUCE 在最小化按钮上。   · HTRIGHT 在窗口的右边框上。   · HTSIZE 在尺寸框中。(与HTGROWBOX相同)   · HTSYSMENU 在控制菜单或子窗口的关闭按钮上。   · HTTOP 在窗口水平边框的上方。   · HTTOPLEFT 在窗口边框的左上角。   · HTTOPRIGHT 在窗口边框的右上角。   · HTTRANSPARENT 在一个被其它窗口覆盖的窗口中。   · HTVSCROLL 在垂直滚动条中。   · HTZOOM 在最大化按钮上。   VCL里的使用情况: procedure TControl.CMHitTest(var Message: TCMHitTest); begin Message.Result := HTCLIENT; // 凡是转发到TControl的,都是位于客户区 end; procedure TWinControl.WMNCHitTest(var Message: TWMNCHitTest); begin with Message do if (csDesigning in ComponentState) and (FParent <> nil) then Result := HTCLIENT // 组件处于设计状态时,都算作位于客户区 else inherited; end; procedure TWinControl.WndProc(var Message: TMessage); var Form: TCustomForm; begin case Message.Msg of WM_SETFOCUS: begin Form := GetParentForm(Self); if (Form <> nil) and not Form.SetFocusedControl(Self) then Exit; end; WM_KILLFOCUS: if csFocusing in ControlState then Exit; WM_NCHITTEST: begin inherited WndProc(Message); // 一般情况下委托给父类函数处理 if (Message.Result = HTTRANSPARENT) and (ControlAtPos(ScreenToClient( SmallPointToPoint(TWMNCHitTest(Message).Pos)), False) <> nil) then Message.Result := HTCLIENT; // 但如果父类的处理结果是透明,那么就重新测试,并且算位于客户区 Exit; end; WM_MOUSEFIRST..WM_MOUSELAST: begin if Message.Msg = WM_LBUTTONUP then begin tag := 50; end; if IsControlMouseMsg(TWMMouse(Message)) then begin { Check HandleAllocated because IsControlMouseMsg might have freed the window if user code executed something like Parent := nil. } if (Message.Result = 0) and HandleAllocated then DefWindowProc(Handle, Message.Msg, Message.wParam, Message.lParam); Exit; end; end; WM_KEYFIRST..WM_KEYLAST: if Dragging then Exit; WM_CANCELMODE: if (GetCapture = Handle) and (CaptureControl <> nil) and (CaptureControl.Parent = Self) then CaptureControl.Perform(WM_CANCELMODE, 0, 0); end; inherited WndProc(Message); end; procedure TWinControl.WMSetCursor(var Message: TWMSetCursor); var Cursor: TCursor; Control: TControl; P: TPoint; begin with Message do if CursorWnd = FHandle then case Smallint(HitTest) of // 其中HitTest是TWMSetCursor消息结构体自带的Word类型数据 HTCLIENT: // 如果位于客户区,则进行一系列处理,包括改变光标和进一步测试 begin Cursor := Screen.Cursor; if Cursor = crDefault then begin GetCursorPos(P); Control := ControlAtPos(ScreenToClient(P), False); if (Control <> nil) then if csDesigning in Control.ComponentState then Cursor := crArrow else Cursor := Control.FCursor; if Cursor = crDefault then if csDesigning in ComponentState then Cursor := crArrow else Cursor := FCursor; end; if Cursor <> crDefault then begin Windows.SetCursor(Screen.Cursors[Cursor]); Result := 1; Exit; end; end; HTERROR: // 如果测试出错,则把当前程序设置为最前窗口,并且退出测试(以利于进一步测试) if (MouseMsg = WM_LBUTTONDOWN) and (Application.Handle <> 0) and (GetForegroundWindow <> GetLastActivePopup(Application.Handle)) then begin Application.BringToFront; Exit; end; end; inherited; end; procedure TWinControl.CMCursorChanged(var Message: TMessage); var P: TPoint; begin if GetCapture = 0 then begin GetCursorPos(P); if FindDragTarget(P, False) = Self then Perform(WM_SETCURSOR, Handle, HTCLIENT); // 当移动目的控件是当前Win控件的时候,就发送设置焦点的消息,并且传递Handle和HTCLIENT做进一步的处理 end;   end; 其中还有对CM_HITTEST的处理情况:   function TWinControl.ControlAtPos(const Pos: TPoint; AllowDisabled, AllowWinControls: Boolean): TControl; var I: Integer; P: TPoint; LControl: TControl; function GetControlAtPos(AControl: TControl): Boolean; begin with AControl do begin P := Point(Pos.X - Left, Pos.Y - Top); Result := PtInRect(ClientRect, P) and ((csDesigning in ComponentState) and (Visible or not (csNoDesignVisible in ControlStyle)) or (Visible and (Enabled or AllowDisabled) and (Perform(CM_HITTEST, 0, Longint(PointToSmallPoint(P))) <> 0))); // 在VCL内部测试,当前测试点是否位于当前控件区域(利用了函数返回值) if Result then LControl := AControl; end; end; begin LControl := nil; if AllowWinControls and (FWinControls <> nil) then for I := FWinControls.Count - 1 downto 0 do if GetControlAtPos(FWinControls[I]) then Break; if (FControls <> nil) and (LControl = nil) then for I := FControls.Count - 1 downto 0 do if GetControlAtPos(FControls[I]) then Break; Result := LControl; end;    

  • MFC 窗口显示 任务栏不显示

    MFC 窗口显示 任务栏不显示

    C/C++  10-8  960浏览  0评论  

    ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW,1);//任务栏隐藏

  • UpdateLayeredWindow与SetLayeredWindowAttributes

    UpdateLayeredWindow与SetLayeredWindowAttributes

    C/C++  10-7  1089浏览  0评论  

    首先使用透明之前必须设置该窗口为层级窗口,即增加窗口的扩展风格WS_EX_LAYERED,增加的时候最好使用GetWindowlong获取Ex风格,然后加入后在SetWindowLong设置,最好不适用ModifyStyle增加(有时候不好使,我用vs10可以,但08却不行)。    UpdateLayeredWindow使用之后不会再发出WM_PAINT绘制消息,所有的绘制消息都由UpdateLayeredWindow代而处理,所以不要再OnPaint里做任何事,因为是徒劳的(可能在调用Update..之前有用)。   UpdateLayeredWindow是用兼容的dc去更新当前窗口的dc,所有必须要在兼容的dc上绘制好后去更新当前窗口,故而所有操作应该绘制到兼容的dc上,然后用兼容dc去调用UpdateLayeredWindow去透明更新。    UpdateLayeredWindow最后的参数表明透明的方式,第一种是ULW_ALPHA说明是使用图片本身的Alpha通道去透明(鼠标穿透)当前窗口(如果是最新的bmp格式,支持alpha通道,但必须是32四子节的,否则为3字节即24bit,如果使用4字节,最后字节为alpha通道,该通道决定透明度,如果非得填写24bit即3字节,那么默认的一个alpha通道0,也就是说透明度为0是看不见的,切记!!),如果是这样那么BLENDFUNCTION中的SourceConstantAlpha“源常量透明alpha”是没有用的,如果是用ULW_COLORKEY则说明用颜色掩码去透明窗口,也就是说兼容dc中所绘制的画布中如果颜色与掩码色相同则把这部分透明掉(要在兼容dc中绘制透明色);(SourceConstantAlpha不为0则用该值去透明);   SetLayeredWindowAttributes相当于UpdateLayeredWindow的第二种方法及ULW_COLORKEY,SetLayeredWindow不会导致WM_PAINT不发出,也就是可以在OnPaint中绘制你的东西,但是绘制的颜色如果和SetLayeredWindow中指定的一致则透明掉,否则不透明,另外SetLayeredWindow中透明的地方是可以放置其他组建的!!而UpdateLayeredWindow则不可以(鼠标穿透)。   SetLayeredWindowAttributes经测试必须是非child窗口(Overlapend或PoupUp),否则设置无效!!    在6.0上SetLayeredWindowAttributes使用掩码色的时候也就是第二个参数为掩码色,最后参数为LWA_COLORKEY的时候,只要覆盖控件颜色即可,我使用OnctrlColor返回掩码色画刷,可以将整个窗口置为透明,然后再OnPaint里面绘制非掩码色的图形,即可达到只显示绘制部分图形目的,但是,在VS08中使用alpa透明度透明整个窗口可以达到目的,而使用掩码色的时候无论在OnctrlColor返回何种掩码色,参数中设置该掩码色都是透明的(这点在08中为什么不可用还没搞明白),但是如果去掉OnPaint消息函数却可以达到掩码色透明的作用(或者OnPaint中必须调用父类的OnPaint,否则不起作用!)。   SetLayeredWindowAttributes和UpdateLayeredWindow都可以使得透明区域鼠标穿透,但是实际测试的时候vc6.0上SetLayeredWindowAttributes有时候可以有时候不可以(与鼠标移动快慢有关)。   很重要的一个问题就是vc6.0和vs2008中函数指定的调用约定不一致,vc6.0默认是_stdcall 和vs中函数则不是,所以如果在vs中申明User32.dll中的函数的时候必须手动指定调用约定为WINAPI 或CALLBACK或__stdcall类型,否则在GetProcAddr的时候返回类型不一致,在调用UpdateLayeredWindow或SetLayeredWindowAttributes的时候会出现堆栈被破坏错误!!:Run-Time Check Failure ...     UpdateLayeredWindow与SetLayeredWindowAttributes的另一区别是:UpdateLayeredWindow上所有的东西(包括子控件都必须自己绘制上去,自己响应事件)都由个人处理;SetLayeredWindowAttributes则仅仅处理该窗口的掩码色处理成透明色或将整个窗口的透明度设置为LWA_ALPHA 指定的不透明度值,不影响其他子控件的处理;     以下为updatelayeredwindow使用实例:   void CDlgVideoCompressPage::DrawUI(void) {     if(NULL == m_hWnd)return ;     CRect rtClient;GetClientRect(&rtClient);     HDC hDC = ::GetDC(m_hWnd);     HDC hMemDC = ::CreateCompatibleDC(hDC);     BITMAPINFO bitmapinfo;     bitmapinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);     bitmapinfo.bmiHeader.biBitCount = 32;     bitmapinfo.bmiHeader.biHeight = rtClient.Height();     bitmapinfo.bmiHeader.biWidth = rtClient.Width();     bitmapinfo.bmiHeader.biPlanes = 1;     bitmapinfo.bmiHeader.biCompression = BI_RGB;     bitmapinfo.bmiHeader.biXPelsPerMeter = 0;     bitmapinfo.bmiHeader.biYPelsPerMeter = 0;     bitmapinfo.bmiHeader.biClrUsed = 0;     bitmapinfo.bmiHeader.biClrImportant = 0;     bitmapinfo.bmiHeader.biSizeImage = bitmapinfo.bmiHeader.biWidth *                                        bitmapinfo.bmiHeader.biHeight *                                        bitmapinfo.bmiHeader.biBitCount / 8;     HBITMAP hBitmap = ::CreateDIBSection (hMemDC, &bitmapinfo, 0, NULL, 0, 0);     HBITMAP hOldBitmap = (HBITMAP)::SelectObject (hMemDC, hBitmap);     // draw imageCImage img;     if (SUCCEEDED(img.Load(m_strBkImage))){         CRect rtClient;GetClientRect(&rtClient);         img.Draw(hMemDC, rtClient.left, rtClient.top, rtClient.Width(),                  rtClient.Height(), 0, 0, img.GetWidth(), img.GetHeight());         img.Destroy();     }     CPoint DestPt(0,0);     CSize psize(rtClient.Width(), rtClient.Height());     BLENDFUNCTION blendFunc32bpp;     blendFunc32bpp.AlphaFormat = AC_SRC_ALPHA;     blendFunc32bpp.BlendFlags = 0;     blendFunc32bpp.BlendOp = AC_SRC_OVER;     blendFunc32bpp.SourceConstantAlpha = 255;     ::UpdateLayeredWindow(m_hWnd, hDC, NULL, &psize, hMemDC, &DestPt,0,                             &blendFunc32bpp, ULW_ALPHA);     ::SelectObject (hMemDC,hOldBitmap);     ::DeleteObject(hBitmap);     ::DeleteDC(hMemDC);     ::ReleaseDC(m_hWnd,hDC); }          

  • Windows xp sp3 序列号

    Windows xp sp3 序列号

    其它  10-6  927浏览  0评论  

    MRX3F-47B9T-2487J-KWKMF-RPWBY MRX3F-47B9T-2487J-KWKMF-RPWBY(工行版) QC986-27D34-6M3TY-JJXP9-TBGMD(台湾交大学生版) CM3HY-26VYW-6JRYC-X66GX-JVY2D DP7CM-PD6MC-6BKXT-M8JJ6-RPXGJ F4297-RCWJP-P482C-YY23Y-XH8W3 HH7VV-6P3G9-82TWK-QKJJ3-MXR96 HCQ9D-TVCWX-X9QRG-J4B2Y-GR2TT  

  • microsoft visual studio 2010产品密钥

    microsoft visual studio 2010产品密钥

    其它  2-17  1025浏览  0评论  

    YCFHQ-9DWCY-DKV88-T2TMH-G7BHP

  • 欢庆元旦迎新春2018新年海报

    欢庆元旦迎新春2018新年海报

    新年  1-1  2125浏览  0评论  

        个人收藏的PS文件,大部份是PSD格式的,分享给朋友,仅供学习交流使用!   欢庆元旦迎新春2018新年海报大小:145M | 来源:百度网盘 密码:io9o  已经过安全软件检测无毒,请您放心下载。

  • 高端大气2018企业年会展板设计

    高端大气2018企业年会展板设计

    新年  1-1  1005浏览  0评论  

        个人收藏的PS文件,大部份是PSD格式的,分享给朋友,仅供学习交流使用!   高端大气2018企业年会展板设计大小:66.9M | 来源:百度网盘 密码:prpd 已经过安全软件检测无毒,请您放心下载。