Windows 程序设计3、4章笔记
2011-10-20 14:47
423 查看
#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) ; //返回缺省的窗口过程
}
#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) ; //返回缺省的窗口过程
}
相关文章推荐
- Windows 程序设计3、4章笔记
- Windows 程序设计3、4章笔记
- Windows程序设计 读书笔记 - 子窗口控制(控件)。
- Windows程序设计 读书笔记 - 领略INTERNET
- 《windows 程序设计》中的翻译错误----学习笔记
- Windows程序设计笔记(1)
- Windows程序设计学习笔记
- windows程序设计「DIBHEADS.C」范例分析笔记
- C# Windows 程序设计 学习笔记2 Paint事件
- windows程序设计学习笔记-多文档界面
- Windows程序设计 读书笔记 - 多文档界面
- windows 程序设计之「TESTMCI.C」范例分析笔记
- Windows 程序设计学习笔记1
- windows程序设计学习笔记--多任务和多线程
- windows程序设计学习笔记--动态链接库
- windows程序设计——飞机大战笔记(单文档文件登陆界面)
- windows程序设计笔记3
- Java学习笔记-Java程序设计环境(Windows)
- [学习笔记]Windows程序设计:第一章 起步
- Windows程序设计笔记-------调用约定