#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("LineDemo_jackvs") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; //白色背景
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("Program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("jackvs's LineDemo"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
int CxClient,CyClient;
int schemaX,schemaY;
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
RECT rect;
switch (message)
{
case WM_SIZE:
CxClient = LOWORD(lParam);
CyClient = HIWORD(lParam);
return 0 ;
case WM_PAINT:
//method two:
hdc = GetDC(hwnd);
Rectangle(hdc,max(10,10-schemaX),max(10,10-schemaY),max(90,100-schemaX),max(90,100-schemaY));
//画一条对角线
MoveToEx(hdc,0,0,NULL);
LineTo(hdc,CxClient,CyClient);
ReleaseDC(hwnd,hdc);
return 0 ;
case WM_KEYDOWN:
GetClientRect(hwnd,&rect);
switch (wParam)
{
case VK_UP:
schemaY++;
break;
case VK_DOWN:
schemaY--;
break;
case VK_LEFT:
schemaX++;
break;
case VK_RIGHT:
schemaX--;
break;
}
InvalidateRect(hwnd,&rect,TRUE);
UpdateWindow(hwnd);
return 0;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
//在矩形和线条的相交处总要闪烁,请大家帮忙一起解决下
HBITMAP hImageBMP = CreateCompatibleBitmap(hdc, CxClient, CyClient); // 创建兼容位图
HDC hImageDC = CreateCompatibleDC(hdc);//
hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
Rectangle(hImageDC ,max(10,10-schemaX),max(10,10-schemaY),max(90,100-schemaX),max(90,100-schemaY));
//画一条对角线
MoveToEx(hImageDC ,0,0,NULL);
LineTo(hImageDC ,CxClient,CyClient);
BitBlt(hdch, 0, 0, CxClient, CyClient, ImageDC, 0, 0, SRCCOPY);
DeleteDC(hImageDC);
DeleteObject(hImageBMP);
ReleaseDC(hwnd,hdc);
大致上是这个样子。
PAINTSTRUCT ps;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
Rectangle(hdc,max(10,10-schemaX),max(10,10-schemaY),max(90,100-schemaX),max(90,100-schemaY));
//画一条对角线
MoveToEx(hdc,0,0,NULL);
LineTo(hdc,CxClient,CyClient);
EndPaint(hwnd, &ps);
return 0 ;
一个矩形一条线,没必要双缓冲吧!呵呵~~~~
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, width, height);
memDC.SelectObject(&capBmp);
memDC.BitBlt(0, 0, width, height, &dc, 0, 0, SRCCOPY);
//drawGraphics(&memDC);//使用这个函数画图
dc.BitBlt(0, 0, width, height, &memDC, 0, 0, SRCCOPY);
这才是关键。
其实不用getdc了~~wm_paint消息里面已经有这个Dc了 ~~
直接取出来用就可以了,但是开始画之前一定要先 BeginPaint()
不然你那些画的东西又会使这些区域无效,又会触发新的wm_paint消息。
那些闪烁就是不停画的原因。
关于指针变量在内存中所在的长度 怎么取消新建对话框的默认确定和取消键? 关于部署水晶报表10出现的问题,郁闷啊,帮忙解决一下吧,谢谢大家了 没有看书,软设40/52 ,不知道江苏的分数线,估计是45/45吧,下一次恶补理论知识应该能过了吧 广东惠州西门子搞java开发怎么样? 都有分. Cannot start Java debug process VM(jbuilder 9.0) 请教各位高手,如何把网页上的显示的符合条件的表单倒出为dbf格式 关于INTRWEB的问题 菜鸟问题 大家有什么好的建议? 写浮点运算仿真库的书如何? 求教JS文件不能支持中文的问题 来看看吧! 急!! LINUX下用C如何使字符串转化成对应的ASCII码 请教ShowMessageFmt的用法 这个网站有点意思 如何可以删除程序自己~~~~ 征短篇笑话,散分200 如何在.net通过代码来给xml指定schema,急,请大家帮忙 在sqlserver2000里,怎么样把已有的登录帐号与已有的用户相关联? windows 2003与windows 2003 r2版有什么不同 ajax到底能不能用vb.net来开发 从今起准备混这里,我还是菜鸟,希望大家多多指点 关于线形表插入删除的效率 散分,征求想法 正确的SQL语句,放在VC中,从DB2数据库中选出数据,但CMyRecordSet类的列数据成员中却没有值! 汇编里对键盘状态的控制 请教高手,在线等 CS结构外网数据连接???急......(在线等待...) 用DATALIST控件绑定数据时,如何对数据进行一定的计算?