把握命运,追逐梦想

对自己所做的事要有兴趣,同时还要能够坚持不懈

统计

留言簿(1)

阅读排行榜

评论排行榜

CreateFile和WriteFile

#include"windows.h"
#include
"tchar.h"

LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

HANDLE g_hFile;
HANDLE g_hFile1;
struct sMsg
{
    DWORD time;
    DWORD message;
}
;

    

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE ,LPTSTR lpCmdLine,int nCmdShow)
{
    
if(!hInstance) return 0;
    WNDCLASSEX wcex;
    wcex.style 
= CS_HREDRAW |    CS_OWNDC|CS_VREDRAW ;          //常用设置,这个设置定义类在遇到各种情况时的行为,不过都是些可有可无的东西
    wcex.lpszClassName = TEXT("FIRSTCLASS");                         //类名,必须存在,这是引用类的差不多唯一的标志,另一个是class atom
    wcex.hInstance = hInstance;                                                    //类所属的模块句柄,如果style中有CS_OWNDC,相反,如果是CS_CLASSDC的话,这个类就属于这个进程
    wcex.lpszMenuName = NULL;                                               //这是个指向菜单资源的指针,如果是NULL的话,则没有菜单
    wcex.hCursor = LoadCursor(NULL,IDC_ARROW);           //加载鼠标图标,如果是NULL的话,系统没有默认的鼠标图标,因此图标会出现未定义情况
    wcex.hIcon  = NULL;                                                               //系统会加载默认图标
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpfnWndProc 
= WindowProc;
    wcex.cbClsExtra 
=0;                                                               //分配给类的额外内存,根本用不上,设为0
    wcex.cbWndExtra = 0;                                                        //分配给由这个类产生的所有窗口的每一个内存大小,用不上,0
    wcex.cbSize = sizeof(WNDCLASSEX);                             //类的大小,这个估计是以后扩展的时候用的吧,总共两种,难道是用来区分普通类和扩展类???
    wcex.hIconSm = NULL;                                                          //小型图标,NULL,系统知道如何处理,影响不了程序的正常运行

    
if(!RegisterClassEx(&wcex))                                //函数失败,返回0,否则返回一个atom,这个atom是用来标记类的,但是用的不多,能用类名的地方,也能用这东西
    {
        
return 0;
    }


    g_hFile   
=   CreateFile(L"d:\\pe\\messagefile.txt",         //   file   to   open   
    GENERIC_WRITE,                     //   open   for   reading   
    FILE_SHARE_WRITE,               //   share   for   reading   
    NULL,                                     //   default   security   
    OPEN_ALWAYS,                   //   existing   file   only   
    FILE_ATTRIBUTE_NORMAL,   //   normal   file   
    NULL);   

    g_hFile1 
= CreateFile(L"messagefile1.txt",
        GENERIC_WRITE,
        FILE_SHARE_WRITE,
        NULL,
        OPEN_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL);

    
//下面的这个函数和CreateWindow是同一个,只是define了几个参数而以,所以现在使用的CreateWindow就是CreateWindowEx
    HWND hWnd = CreateWindowEx(0L,_T("FIRSTCLASS"),_T("name"),WS_OVERLAPPEDWINDOW ,CW_USEDEFAULT,CW_USEDEFAULT,640,480,NULL,NULL,hInstance,NULL);
    
if(!hWnd)
    
{
        
return 0;
    }

        
    ShowWindow(hWnd,nCmdShow  );
    

    MSG msg 
= {0};
    DWORD nbuffer;
    
while(GetMessage(&msg,NULL,0,0))
    
{
        TranslateMessage(
&msg);

        sMsg smsg 
= {0};
        smsg.time 
= msg.time;
        smsg.message 
= msg.message;
        WriteFile(  g_hFile1,   
&smsg,   sizeof(smsg),   &nbuffer,   NULL  );  
        
        DispatchMessage(
&msg);
    }


    CloseHandle(g_hFile); 
    CloseHandle(g_hFile1);

    
return (int)msg.wParam;


}



LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    DWORD nbuffer;
    WriteFile( g_hFile,   
&uMsg,   sizeof(uMsg),   &nbuffer,   NULL  );   



    PAINTSTRUCT ps;
    HDC hdc;

    
switch(uMsg)
    
{
    
case WM_PAINT:
        hdc 
= BeginPaint(hWnd,&ps);
        EndPaint(hWnd,
&ps);
        
break;
    
case WM_DESTROY:
        PostQuitMessage(
0);
        
break;
    
default:
        
return DefWindowProc(hWnd,uMsg,wParam,lParam);
    }

    
return 0;
}

posted on 2009-08-12 19:46 把握命运 阅读(434) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理