首    页 界面/窗口 网络/通讯 数据库 组件开发 图像/多媒体 NET/Web 其它技术 源码下载 资料下载 软件共享 软件外包 曲艺杂谈
栏目导航:  首    页  |  图像/多媒体  |  图形编程   


SDK编程之绘制八皇后的图形


原作者:不详    源出处:CSDN    发布者:施昌权    发布类型:转载    发布日期:2008-11-13

  

终于要把我在VC的DOS窗口下写的自认为还行的八皇后程序搬到VC的窗口上去显示了.在”移动”代码的时候还是有些小问题。

比方说,为了提高C语言中程序的柔韧性,我用这样的方式来定义数据类型.

#define DataType int

然后在某处,如一个栈中,用

DataType arr[LENGTH]

可是,放到VC里就冲突啦,因为它的某些地方也用了这样的技巧!英雄所见略同哩~~~J

所以,只好把我的DataType前加上一个EDataType,就OK啦.

#include "MyAssert.h"

#include "EightQueens.h"

#include<windows.h>

#include <stdlib.h>

#include <string.h>

#include <stdio.h>

 

#define problemSize 8

 

long WINAPI WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam);

BOOL InitWindowsClass(HINSTANCE hInstance);

BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);

HWND hWndMain;

 

 

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

 

//program starting.

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)

{

    MSG   msg;

    if(!InitWindowsClass(hInstance))

       return FALSE;

   

    if(!InitWindows(hInstance,nCmdShow))

       return FALSE;

   

    //Core message looping

    while(GetMessage(&msg,NULL,0,0))

    {

       TranslateMessage(&msg);

       DispatchMessage(&msg);

    }

 

    return msg.wParam;

 

}

 

//main wndProc function: message looping

long WINAPI WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

    HDC hDC;

    HBRUSH hBrush;

    HPEN hPen;

    PAINTSTRUCT PtStr;

 

    int* arr;

    FILE* outputFile;

    LPPOINT myPoint;

   

    assertF((outputFile=fopen("outputFile","wb"))!=NULL,"output file error");

 

    int i,j;

    int posX,posY;

    int step=20;

 

    POINT points[6]={{100,212},{70,227},{70,250},{130,250},{130,227},{100,212}};

    switch(iMessage)

    {

       case WM_PAINT:

           //First draw,a black line

           hDC=BeginPaint(hWnd,&PtStr);

           hPen=(HPEN)GetStockObject(NULL_PEN);//get empty brush

           SelectObject(hDC,hPen);

           hBrush=(HBRUSH)GetStockObject(BLACK_BRUSH);

           SelectObject(hDC,hBrush);

              LineTo(hDC,50,50);//draw line

           DeleteObject(hPen);//delete first brush

          

           hPen=CreatePen(PS_SOLID,2,RGB(255,0,0));//create pen

           SelectObject(hDC,hPen);

          

           step=50;

           posX=50;

           posY=50;

   

           arr=NQueensProblemStack(problemSize,outputFile);

 

           for(i=0;i<10;i++)

           {

              MoveToEx(hDC,posX,posY+(i-1)*step,NULL);

              LineTo(hDC,posX+400,posY+(i-1)*step);

           }

          

           for(j=0;j<10;j++)

           {

              MoveToEx(hDC,posX+(j-1)*step,posY,NULL);

              LineTo(hDC,posX+(j-1)*step,posY+400);

           }

           j=1;

           for(i=0;i<8;i++)

           {

                  Ellipse(hDC,posX+arr[i]*50,posY+(j-1)*50,posX+(arr[i]+1)*50,posY+j*50);

                  j++;

           }

                

           DeleteObject(hPen);

           DeleteObject(hBrush);

           EndPaint(hWnd,&PtStr);

          

           return 0;

       case WM_DESTROY:

           PostQuitMessage(0);

           return 0;

       default:

           return DefWindowProc(hWnd,iMessage,wParam,lParam);

             

    }

}

 

//Init the Window to show out.

BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)

{

    HWND hWnd;

    hWnd=CreateWindow("WinFill",

              "填充示例程序",

                  WS_OVERLAPPEDWINDOW,

              CW_USEDEFAULT,

              0,

              CW_USEDEFAULT,

              0,

              NULL, 

              NULL,

              hInstance,

              NULL  

               );

    if(!hWnd)

       return FALSE;

    hWndMain=hWnd;

    ShowWindow(hWnd,nCmdShow);

    UpdateWindow(hWnd);

    return TRUE;

}

 

//Set wndClass Propertity

BOOL InitWindowsClass(HINSTANCE hInstance)

{

    WNDCLASS wndClass;

 

    wndClass.cbClsExtra=0;

    wndClass.cbWndExtra=0;

    wndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

    wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);

    wndClass.hIcon=LoadIcon(NULL,"END");

    wndClass.hInstance=hInstance;

    wndClass.lpfnWndProc=WndProc;

    wndClass.lpszClassName="WinFill";

    wndClass.lpszMenuName=NULL;

    wndClass.style=CS_HREDRAW|CS_VREDRAW;

   

    return RegisterClass(&wndClass);

}

  

关于我们 版权声明 广告服务 联系我们 友情链接 加入收藏
站长:施昌权    Email:scq2099yt@163.com    MSN:scq2099yt@live.cn    QQ:14046300    本站QQ群:67202409
Copyright © 2008     卓为VC(www.joyvc.cn)    All Rights Reserved    建议分辨率 1024×768
本站由施昌权制作维护
京ICP备09012297号