随笔分类 -  Windows

摘要:大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似DOS窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出.下面就介绍一下,如何隐藏win32 console application的console窗口因为此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译器的链接开关选项(也就是linker选项).首先我们来看一下linker的 /subsystem 选项该选项的语法形式如下:/SUBSYSTEM:{CONSOLE|EFI_AP 阅读全文
posted @ 2012-10-26 10:09 likebeta 阅读(1550) 评论(0) 推荐(0)
摘要:很多朋友都会有过这样的经历,为什么在主线程中创建窗口且窗口工作很正常,但一移到非主线程(有的朋友喜欢叫它为工作线程),却无法正常工作.本文就这个问题和各位探讨,可能无法做到尽善尽美,但能抛砖引玉也算是欣慰了. 在主线程中创建一个能够正常工作的窗口,估计地球人都知道. 这是一段工作正常的代码:#include "windows.h"HWND g_hWnd = NULL;HINSTANCE g_hInst;LRESULT WndProc(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam){ return DefWindowProc( 阅读全文
posted @ 2012-09-21 11:25 likebeta 阅读(4916) 评论(0) 推荐(0)
摘要:窗口风格是各种窗口开发的重要基础之一。它可以分为普通风格(WS_系列)和扩展风格(WS_EX_系列)。从其特点上,主要分成两大类:1.一类表明窗口和其它窗口的关系,包括:WS_CHILD、WS_POPUP、WS_OVERLAPPED、WS_CLIPCHILDREN、WS_CLIPSIBLINGS、WS_GROUP、WS_EX_TOPMOST、WS_EX_MDICHILD等。(这里的关系并不是指Foreground/Background window和Z-Order的概念)2.一类表明窗口自身的外观特征,包括:WS_BORDER、WS_CAPTION、WS_MINIMIZE、WS­&# 阅读全文
posted @ 2012-09-15 23:42 likebeta 阅读(4568) 评论(0) 推荐(1)
摘要:第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄函数的定义:HWNDWINAPIFindWindow(LPCSTRlpClassName,LPCSTRlpWindowName);第一个参数填窗口的类名,第二个填窗口的标题名,其实是不需要同时填两个参数的,也就是说,你只要知道窗口的类名或窗口的标题就可以了,没有的那个就用NULL代替。比如现在有一个窗口名为"无标题.txt-记事本"的记事本程序。那么我就可以用上面的函数获得这个窗口的句柄,那获得了这个窗口的句柄我可以干什么呢?作用可大了,因为很多操作窗口的函数,都需要窗口句柄作参数,如 阅读全文
posted @ 2012-09-11 14:09 likebeta 阅读(9421) 评论(2) 推荐(2)
摘要:1. 系统何时发送WM_PAINT消息? 系统会在多个不同的时机发送 WM_PAINT 消息:当第一次创建一个窗口时,当改变窗口的大小时,当把窗口从另一个窗口背后移出时,当最大化或最小化窗口时,等等,这些动作都是由系统管理的,应用只是被动地接收该消息,在消息处理函数中进行绘制操作;大多数的时候应用也需要能够主动引发窗口中的绘制操作,比如当窗口显示的数据改变的时候,这一般是通过 InvalidateRect 和 InvalidateRgn 函数来完成的。 InvalidateRect 和 InvalidateRgn把指定的区域加到窗口的 Update Region 中,当应用的消息队列... 阅读全文
posted @ 2012-07-30 10:04 likebeta 阅读(4265) 评论(0) 推荐(0)
摘要:今天想仿制酷狗7的关闭效果, 用spy++竟然hook不住, 我以为它不是窗体,而是直接在桌面窗口上画图, 开始的想法是得到桌面没有绘制子窗口时的dc,然后在上面画, 但是我向他发送WM_PRINTCLIENT时,得到的黑色的背景, 最后查文档发现发送给这个消息,接受者窗口应该实现这个消息的处理, 最后在网上找到这篇神文:http://www.fengyuan.com/article/wmprint.html但是我发现还是不对, 因为这样也无法实现酷狗的关闭效果, 况且上面文章提供的subclass方法是使用的SetWindowlong修改消息处理过程来实现的,然而SetWindowlong在 阅读全文
posted @ 2012-07-25 16:15 likebeta 阅读(513) 评论(0) 推荐(0)
摘要:今天想获取桌面DC然后在上面作图, 结果不显示,巨郁闷:HDC hdc = GetDC(NULL); HWND hDeskWnd = GetDesktopWindow();HDC hDeskDc = GetDC(hDeskWnd);TextOut(hDeskDc, 100, 10, _T("this is my test "), 15); TextOut(hdc, 100, 10, _T("this is my test "), 15); 使用hdc可以,而hDeskDc却不行,,搜索后发现了错误:获取桌面DC的方法:GetD... 阅读全文
posted @ 2012-07-25 12:27 likebeta 阅读(3661) 评论(0) 推荐(0)
摘要:Windows 应用程序必须有一个入口点函数,应用程序开始运行时,这个函数会被调用。C/C++开发人员可以使用以下两种入口点函数:Int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE, PTSTR pszCmdLine, int nCmdShow);int _tmain( int argc, TCHAR *argv[], TCHAR *envp[]);具体的符号取决于我们是否要使用Unicode字符串。操作系统实际上不会调用我们写的入口点函数,他会调用由C/C++运行库实现并在链接时使用-entry:... 阅读全文
posted @ 2012-06-28 20:26 likebeta 阅读(1310) 评论(0) 推荐(0)
摘要:由于标准的按钮控件在样式上比较单调,因此,在很多时候,我们都需要对标准按钮控件实行自画,以满足特定的需求。为了能让按钮控件支持自画,需要设置按钮的BS_OWNERDRAW风格,一般情况下,我们可以在PreSubclassWindow中进行设置: class CxxxButton : public CButton { ... }; void CxxxButton::PreSubclassWindow() { ModifyStyle( 0, BS_OWNERDRAW); CButton::PreSubclassWindow (); }这样,我们就可以重载DrawItem,从而... 阅读全文
posted @ 2012-05-17 15:49 likebeta 阅读(1125) 评论(0) 推荐(0)
摘要:当子窗口被建立,销毁或用户单击鼠标键时,WM_PARENTNOTIFY被发送使用如下:LRESULT WINAPI xxx_WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam){ switch(uMsg) { HANDLE_MSG(hwnd,WM_PARENTNOTIFY, xxxx_OnParentNotify); } return( DefWindowProc(hwnd,uMsg,wParam,lParam));}void xxx_OnParentNotify(HWND hwnd, UINT msg, ... 阅读全文
posted @ 2012-04-28 14:44 likebeta 阅读(6890) 评论(0) 推荐(0)
摘要://删除文件或者文件夹bool DeleteFile(string strPath){ int nLen = strPath.length(); char* pPath = new char[nLen+2]; strcpy(pPath,strPath.c_str()); pPath[nLen+1]='\0'; SHFILEOPSTRUCT FileOp={0}; FileOp.fFlags = //FOF_ALLOWUNDO | //允许放回回收站 FOF_NOCONFIRMATION | //不出现确认对话框 FOF_NO... 阅读全文
posted @ 2012-04-23 20:42 likebeta 阅读(2925) 评论(0) 推荐(0)
摘要:7z a -tzip -p111 archive.7z txt.txt 压缩 密码为1117z x -tzip -p111 archive.7z 解压 密码为1117z.exe 是 7-Zip 的命令行版本。7z.exe 使用 7-Zip 的其它模块,7za.exe 是7-Zip 的独立版本,7za.exe 仅支持 7z、zip、gzip、bzip2 和 tar 格式,7za.exe 使用时不会调用其它模块。命令行选项7z [命令行] [[选项]...] [基本档案名称] [[参数变量]...]7z [command] [[switch]...] [base_archive_name... 阅读全文
posted @ 2012-04-23 13:32 likebeta 阅读(1176) 评论(0) 推荐(0)
摘要:如何在没有窗口的线程环境使用SetTimer()函数关键点:消息循环(GetMessage,DispatchMessage)必须和setTImer函数在同一个线程中。#include <iostream>#include <stdio.h>#include <windows.h>#define IDT_TIMER 100void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime){ SYSTEMTIME st; GetLocalTime(&st); printf( 阅读全文
posted @ 2012-04-19 17:09 likebeta 阅读(1959) 评论(0) 推荐(0)
摘要:今天写程序的时候用到GDI+,不过编译不通过。出现的错误为:1>------ Build started: Project: Label, Configuration: Debug Win32 ------1>Compiling...1>stdafx.cpp1>c:/program files/microsoft sdks/windows/v6.0a/include/gdiplusimaging.h(74) : error C4430: missing type specifier - int assumed. Note: C++ does not support de 阅读全文
posted @ 2012-04-16 18:35 likebeta 阅读(2347) 评论(0) 推荐(0)
摘要:先使用InternetOpen初始化WinINet函数,然后在使用InternetOpenUrl打开指定链接,最后就用InternetReadFile就能读取到网页源代码.下面的代码能够打开http://www.baidu.com/并且将网页源代码打印出来.#include <stdio.h>#include <windows.h>#include <wininet.h>#pragma comment(lib,"Wininet.lib")#include <vector>using namespace std; int mai 阅读全文
posted @ 2012-04-01 10:50 likebeta 阅读(9424) 评论(4) 推荐(2)
摘要:MSDN:TheWM_QUERYENDSESSIONmessage is sent when the user chooses to end the session or when an application calls one of the system shutdown functions. If any application returns zero, the session is not ended. The system stops sendingWM_QUERYENDSESSIONmessages as soon as one application returns zero. 阅读全文
posted @ 2012-03-31 11:20 likebeta 阅读(8959) 评论(2) 推荐(0)
摘要:原型:BOOL PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg);前面的四个参数(一个指向MSG结构的指标、一个视窗代号、两个值指示消息范围)与GetMessage的参数相同。将第二、三、四个参数设定为NULL或0时,表明我们想让PeekMessage传回程式中所有视窗的所有消息。如果要将消息从消息伫列中删除,则将PeekMessage的最後一个参数设定为PM_REMOVE。如果您不希望删除消息,那么您可以将这个参数设定为PM_NOREMOVE。这就是为什么P 阅读全文
posted @ 2012-03-28 18:35 likebeta 阅读(27954) 评论(0) 推荐(3)
摘要:概述最大化、最小化和关闭按钮是窗口中最主要的元素。首先要说明,说他们是按钮其实是不准确的,按钮是一种窗口,而这三个组件根本就不是窗口,而是一个窗口常见的组成部分。出于习惯的原因,这里还是称呼他们为按钮。这三个按钮是否显示似乎只能在窗口创建是决定。首先,要显示这三个按钮,窗口必须有标题条和系统菜单,没有标题条和系统菜单的窗口是不能显示这三个按钮的,也就是说,要想有这三个按钮,创建窗口时必须有WS_CAPTION和WS_SYSMENU风格。当窗口创建时有风格WS_MAXIMIZEBOX时,窗口显示最大化按钮,当有风格WS_MINIMIZEBOX时,窗口显示最小化按钮,而只要有标题条并且有系统菜单, 阅读全文
posted @ 2012-03-07 12:34 likebeta 阅读(1723) 评论(0) 推荐(0)
摘要:在WIN32中,模式对话框的创建一般是使用DialogBox来进行创建的。而非模式对话框则是利用CreateWindow来创建的。在MFC或是WTL中,模式对话框一般是使用DoModal,而非模式对话框的创建则是使用Create。模式对话框创建后,程序的其他窗口便不能进行操作,必须将该窗口关闭后,其他窗口才能进行操作。而非模式对话框则无需这样,它不强制要求用户立即反应,而是与其他窗口同时接受用户操作。Create的Dialog一般是modalless,如果你的程序本身就是只有一个Dialog,就无所谓了,看不出modalless的效果。modalless本来就是让有机会切换到本程序的其他窗口。 阅读全文
posted @ 2011-11-17 21:08 likebeta 阅读(9991) 评论(1) 推荐(4)
摘要:大家知道,很多Windows程序都使用MessageBox()来显示一个对话框给用户以提示,只要在这个API函数的一个参数中使用MB_ICONQUESTION标志,便可以在MessageBox的对话框中显示问号图标。如果用不同的标志,对话框便可以显示不同的图标。与Windows以前的老版本相比,Windows 2000以及Windows XP中的图标越来越好看,种类也越来越多。 前段时间, 做的项目中对界面进行了重写,在基本完工的时候发现MessageBox()的风格和开发的程序非常不协调,所以打算使用自定义对话框来替代MessageBox(), 要和MessageBox()产生一样... 阅读全文
posted @ 2011-10-27 13:42 likebeta 阅读(4171) 评论(0) 推荐(0)