您的位置:首页 > 其它

Windows 程序设计3、4章笔记

2011-10-20 14:47 363 查看
#include "windows.h"

#include "stdio.h"

#include "stdlib.h"

#include "resource.h" //预编译我们的资源文件

#include "tchar.h"

LRESULT CALLBACK MyProc(

HWND hwnd,

UINT uMsg,

WPARAM wParam,

LPARAM lParam

);

int WINAPI WinMain(

HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow

)

{ HWND hWnd ;

MSG msg ;

static TCHAR szAppName[] = TEXT ("NewWindow") ; //窗口类名

WNDCLASS cls ;

cls.cbClsExtra=0 ;

cls.cbWndExtra=0 ;

cls.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH) ;

cls.hCursor=LoadCursorFromFile("resource\\xx.ani") ;

cls.hIcon=LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)) ;

cls.hInstance=hInstance ;

cls.lpfnWndProc=MyProc ;

cls.lpszClassName=szAppName;

cls.lpszMenuName=NULL;

cls.style=CS_HREDRAW|CS_VREDRAW| 0x00020000; //CS_DROPSHADOW 0x00020000在 vc6 以及以前的版本中没有定义 我们可以自定义 这个窗体有阴影

RegisterClass(&cls) ;

hWnd=CreateWindow("NewWindow","SDK_Window Demo",WS_TABSTOP|WS_HSCROLL|WS_VSCROLL|WS_SYSMENU ,200,200,500,400,NULL,NULL,hInstance,NULL) ;

ShowWindow(hWnd,SW_SHOWNORMAL) ;

UpdateWindow(hWnd) ;

while(GetMessage(&msg,NULL,0,0)) //获得消息 后面2个参数为0会接受任何 win32消息

{

TranslateMessage(&msg) ; //翻译消息

DispatchMessage(&msg) ;//分发消息

}

return 0;

}

LRESULT CALLBACK MyProc(

HWND hwnd,

UINT uMsg, //win32消息的类型

WPARAM wParam, //第一个附加参数

LPARAM lParam //第二个附加参数一般是值

)

{

switch (uMsg)

{

case WM_PAINT : //UpdateWindow函数的调用会进入这个消息响应

{

HDC dc ;

PAINTSTRUCT ps ;

dc=BeginPaint(hwnd,&ps) ;

SetTextAlign(dc,TA_LEFT|TA_TOP) ; //设置基点的位置 。。也就是坐标(0,0)

TextOut(dc,60,60,_T("GameWnd"),lstrlen(_T("GameWnd")));//include TCHAR.H Head File

EndPaint(hwnd,&ps) ;

return 0 ;

}

case WM_CREATE : //当窗体创建的时候 是 窗口过程接受的第一个消息

{

// SetWindowLong(hwnd,GWL_STYLE,(GetWindowLCong(hwnd,GWL_STYLE)&~WS_CAPTION)); //SetWindowLong 设置窗体的style

SetScrollRange(hwnd,SB_HORZ,0,100,FALSE) ; //SetScrollRange 设置 滚动条的范围 是min-max

SetScrollPos(hwnd,SB_HORZ,50,FALSE) ; // SetScrollPos设置滚动条的位置 是相对与 min-max中的位置 最后一个参数设置为false表示不需要重绘

//InvalidateRect会使客户区域变为 Invalid Area 从而向消息队列中加入 WM_PAINT 消息但始终合格消息的优先级较低 但是我们可以调用 UpdateWindow立即更新窗口

//也就是 说 在调用了 InvalidateRect 时候接着调用 UpdateWindow 才会立即重绘

//新的函数 GetScrollInfo 和 GetScrollInfo函数可以完成上述四个函数的功能具体应用 MSDN



return 0 ;

}

case WM_CHAR :

{

if('Q'==(char)wParam)

if(IDYES==MessageBox(hwnd,_T("是否要退出?"),_T("提示"),MB_YESNO) )

{

DestroyWindow(hwnd) ; //销毁窗体

}

return 0 ;

}

case WM_DESTROY:

{

PostQuitMessage(0); //向消息队列中发送一个退出消息

return 0;

}



}

return DefWindowProc(hwnd,uMsg,wParam,lParam) ; //返回缺省的窗口过程

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: