java drawlines()方法

22 篇文章 0 订阅

8.2.2  drawLine方法:绘制直线

【功能说明】该方法用于在画布上绘制直线,通过指定直线的两个端点坐标来绘制。该方法只能绘制单条直线;如果需要同时绘制多条直线,则可以使用drawLines方法。

【基本语法】public void drawLine (float startX, float startY, float stopX, float stopY, Paint paint)

参数说明

startX:起始端点的X坐标。

startY:起始端点的Y坐标。

stopX:终止端点的X坐标。

stopY:终止端点的Y坐标。

paint:绘制直线所使用的画笔。

【实例演示】下面通过代码来演示如何在画布上绘制直线。

 
 
  1. protected void onDraw(Canvas canvas) {  
  2.     // TODO Auto-generated method stub  
  3.     super.onDraw(canvas);  
  4.     paint.setColor(Color.BLACK);                    //设置画笔颜色  
  5.     canvas.drawColor(Color.WHITE);                  //设置背景颜色  
  6.     paint.setStrokeWidth((float) 1.0);              //设置线宽  
  7.     canvas.drawLine(50, 50, 450, 50, paint);        //绘制直线  
  8.     paint.setStrokeWidth((float) 5.0);              //设置线宽  
  9.     canvas.drawLine(50, 150, 450, 150, paint);      //绘制直线  
  10.     paint.setStrokeWidth((float) 10.0);             //设置线宽  
  11.     canvas.drawLine(50, 250, 450, 250, paint);      //绘制直线  
  12.     paint.setStrokeWidth((float) 15.0);             //设置线宽  
  13.     canvas.drawLine(50, 350, 450, 350, paint);      //绘制直线  
  14.     paint.setStrokeWidth((float) 20.0);             //设置线宽  
  15.     canvas.drawLine(50, 450, 450, 450, paint);      //绘制直线  
  16. }  

在这段代码中,首先为画笔设置了颜色,然后将画布的背景设置为白色,接着绘制了4条直线,每条直线的线宽都不一样。读者运行这段代码,可以在手机屏幕上看到如图8.12所示的显示效果。
 
图8.11  设置黄色背景
 
图8.12  绘制直线

8.2.3  drawLines方法:绘制多条直线

【功能说明】该方法用于在画布上绘制多条直线,通过指定直线的端点坐标数组来绘制。该方法可以绘制多条直线,非常灵活。

【基本语法】public void drawLines (float[] pts, Paint paint)

参数说明

pts:绘制直线的端点数组,每条直线占用4个数据。

paint:绘制直线所使用的画笔。

【实例演示】下面通过代码来演示如何在画布上绘制多条直线。

 
 
  1. protected void onDraw(Canvas canvas) {  
  2.     // TODO Auto-generated method stub  
  3.     super.onDraw(canvas);  
  4.     paint.setColor(Color.BLACK);                    //设置画笔颜色  
  5.     float[] pts={50,50,400,50,  
  6.                 400,50,400,600,  
  7.                 400,600,50,600,  
  8.                 60,600,50,50};                  //数据  
  9.     canvas.drawColor(Color.WHITE);                  //白色背景  
  10.     paint.setStrokeWidth((float) 5.0);              //线宽  
  11.     canvas.drawLines(pts, paint);                   //绘制多条直线  
  12. }  

在这段代码中,首先设置画笔的颜色,然后初始化一个数组代表绘制直线的各个端点,这里每一行4个数组,前两个为起始端点,后两个为终止端点,这里共绘制了4条直线,构成一个封闭的图形。读者运行这段代码,可以在手机屏幕上看到如图8.13所示的显示效果。

8.2.4  drawLines方法:有选择地绘制多条直线

【功能说明】该方法用于在画布上绘制多条直线,通过指定直线的端点坐标数组来绘制。该方法可以绘制多条直线,同时也可以指定哪些线段绘制,而哪些线段不绘制,更加灵活。

【基本语法】public void drawLines (float[] pts, int offset, int count, Paint paint)

参数说明

pts:绘制直线的端点数组,每条直线占用4个数据。

offset:跳过的数据个数,这些数据将不参与绘制过程。

count:实际参与绘制的数据个数。

paint:绘制直线所使用的画笔。

【实例演示】下面通过代码来演示如何在画布上有选择地绘制直线。

 
 
  1. protected void onDraw(Canvas canvas) {  
  2.     // TODO Auto-generated method stub  
  3.     super.onDraw(canvas);  
  4.     paint.setColor(Color.BLACK);                    //设置画笔颜色  
  5.     float[] pts={50,50,400,50,  
  6.                 400,50,400,600,  
  7.                 400,600,50,600,  
  8.                 60,600,50,50};                  //数据  
  9.     canvas.drawColor(Color.WHITE);                  //白色背景  
  10.     paint.setStrokeWidth((float) 5.0);              //线宽  
  11.     canvas.drawLines(pts,4,12,paint);               //有选择地绘制直线  
  12. }  

在这段代码中,首先设置画笔的颜色,然后初始化一个数组代表绘制直线的各个端点。接着,设置画布的背景为白色,在绘制直线时调用drawLines方法,指定跳过前4个数据,取出12个数据绘制直线。读者运行这段代码,可以在手机屏幕上看到如图8.14所示的显示效果。读者可以看到这里绘制了其中的3条直线。
 
图8.13  绘制多条直线



 
图8.14  有选择地绘制直线

android绘图与动画效果参考:http://book.51cto.com/art/201204/328247.htm


  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java编的五子棋 import java.util.*; import java.io.*; import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.*; class Gobang extends JFrame implements Runnable, ActionListener { final static int Player=1; final static int AI =-1; ClassLoader cl = this.getClass().getClassLoader(); Toolkit tk = Toolkit.getDefaultToolkit(); int length=14, game_state, winner, check, step; int grid[][] = new int[length][length]; int locX, locY /* 囱竚 */, count /* 硈囱计 */, x, y /* 既竚 */, displace_x=0, displace_y=0 /* 簿秖 */, direction; ArrayList steps = new ArrayList(); /* 癘魁囱˙ */ JPopupMenu control_menu = new JPopupMenu(); /* 龄匡虫 */ JMenuItem[] command = new JMenuItem[4]; String[] command_str={"囱", "郎", "弄郎", "秨"}; int[][] dir = { {-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1} }; boolean[] dir2 = new boolean[8]; boolean turn; String message; final JDialog dialog = new JDialog(this, "叫匡", true); Font font=new Font("new_font", Font.BOLD, 20); Grid grids[][] = new Grid[length][length]; Image white= tk.getImage(cl.getResource("res/white.png")); Image black= tk.getImage(cl.getResource("res/black.png")); Image title= tk.getImage(cl.getResource("res/title.png")); Image temp; JPanel boardPanel, bigpanel; JRadioButton[] choice = new JRadioButton[2]; final static int Start =0; final static int Select =1; final static int Playing =2; final static int End =3; final static int nil=-1; /* 礚よ */ final static int oblique_1 =0; /* オ */ final static int oblique_2 =1; /* オ */ final static int horizontal =2; /* 绢 */ final static int vertical=3; /*  */ Gobang() { super("き囱"); boardPanel = new JPanel(); boardPanel.setLayout(new GridLayout(length, length, 0, 0)); boardPanel.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); for(int i=0; i<length; i++) for(int j=0; j<length; j++) { grids[i][j] = new Grid(i, j); boardPanel.add(grids[i][j]); } bigpanel = new JPanel(); bigpanel.add(boardPanel, BorderLayout.CENTER); getContentPane().add(bigpanel, BorderLayout.SOUTH); game_state=Start; ThreadStart(); dialog.setSize(160, 100); dialog.setResizable(false); dialog.setLocationRelativeTo(null); ButtonGroup choice_group = new ButtonGroup(); JPanel choice_menu = new JPanel(); choice[0] = new JRadioButton("堵", new ImageIcon(black), true); choice[1] = new JRadioButton("フ", new ImageIcon(white)); for(int i=0; i<choice.length; i++) { choice_menu.add(choice[i]); choice_group.add(choice[i]); } for(int i=0; i<command.length; i++) { command[i] =new JMenuItem(command_str[i]); command[i].addActionListener(this); control_menu.add(command[i]); } JButton select = new JButton("絋﹚"); JPanel select_menu = new JPanel(); select_menu.add(select); select.addActionListener(this); dialog.getContentPane().add(choice_menu, BorderLayout.NORTH); dialog.getContentPane().add(select_menu, BorderLayout.CENTER); setIconImage(title); setResizable(false); setSize(300, 335); setVisible(true); setLocationRelativeTo(null); } public static void main(String[] arg) { Gobang application = new Gobang(); application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent event) { if( event.getSource().equals(command[0]) ) { if(steps.size()!=0) undo(); } else if(event.getSource().equals(command[1]) ) Save(); else if(event.getSource().equals(command[2]) ) Load(); else if(event.getSource().equals(command[3]) ) ReStart(); else { if(choice[1].isSelected()) { temp=white; white=black; black=temp; } dialog.dispose(); } } public void WinCheck() { check = turn? Player: AI; direction=oblique_1; WinCheck2(); } public void WinCheck2() { count=1; switch(direction) { case oblique_1: displace_x=1; displace_y=-1; direction=oblique_2; break; case oblique_2: displace_x=displace_y=1; direction=horizontal; break; case horizontal: displace_x=1; displace_y=0; direction=vertical; break; case vertical: displace_x=0; displace_y=1; direction=nil; break; } x=locX+displace_x; y=locY+displace_y; while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==check) { count=count+1; x=x+displace_x; y=y+displace_y; } x=locX-displace_x; y=locY-displace_y; while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==check) { count=count+1; x=x-displace_x; y=y-displace_y; } if(count>=5) { game_state=End; winner=check; ThreadStart(); } else if(direction!=nil) WinCheck2(); } public void ReStart() { for(int i=0; i<length; i++) for(int j=0; j<length; j++) grids[i][j].Initial(); winner=0; steps.clear(); game_state=Playing; } public void gobangRandom() { displace_y=0; do { displace_x=(int)(Math.random()*8); x =locX+dir[displace_x][0]; y =locY+dir[displace_x][1]; if(!dir2[displace_x]) { displace_y=displace_y+1; dir2[displace_x]=true; } }while((x<0 || x>=length || y<0 || y>=length || grid[x][y]!=0) && displace_y<8); for(int i=0; i<8; i++) dir2[i]=false; if(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0) setMark(x, y); else gobangRandom2(); } private void gobangRandom2() { do { x=(int)(Math.random()*length); y=(int)(Math.random()*length); }while(grid[x][y]!=0); setMark(x, y); } private void gobangAI() { boolean play=true; for(int i=2; i>0; i--) { play=!play; gobangAI4(play); if(turn) return; } for(int i=7; i>=4; i--) { play=!play; step=i/2; gobangAI2(play); if(turn) return; } gobangAI5(); if(!turn) gobangRandom(); } private void gobangAI2(boolean player) { check = player? Player: AI; for(int i=0; i<length; i++) for(int j=0; j<length; j++) { if(turn) break; if(grid[i][j] == check) { count=1; direction=oblique_1; gobangAI3(i, j); } } } private void gobangAI3(int x, int y) { if(count==1) { locX=x; locY=y; } switch(direction) { case oblique_1: displace_x=1; displace_y=-1; break; case oblique_2: displace_x=displace_y=1; break; case horizontal: displace_x=1; displace_y=0; break; case vertical: displace_x=0; displace_y=1; break; } x=x+displace_x; y=y+displace_y; if(x>=0 && x<length && y>=0 && y<length && grid[x][y]==check) { count=count+1; if(count==step) { if(x+displace_x>=0 && x+displace_x<length && y+displace_y>=0 && y+displace_y<length && grid[x+displace_x][y+displace_y]==0) { if(x-step*displace_x<0 || x-step*displace_x>=length || y-step*displace_y<0 || y-step*displace_y>=length || !gobang_SpaceAI(x+displace_x, y+displace_y) || (grid[x-step*displace_x][y-step*displace_y]!=0 && step<3) ) /* 癸翴猵 */ gobangAI3_2(); else setMark2(x+displace_x, y+displace_y); } else gobangAI3_2(); } else gobangAI3(x, y); } else gobangAI3_2(); } private void gobangAI3_2() { if(direction!=vertical) { count=1; direction=direction+1; gobangAI3(locX, locY); } } private void gobangAI4(boolean player) { check = player? Player: AI; for(int i=0; i<length; i++) for(int j=0; j<length; j++) { if(turn) break; if(grid[i][j]==0) { direction=oblique_1; locX=i; locY=j; gobangAI4(); } } } private void gobangAI4() { count=0; switch(direction) { case oblique_1: displace_x=1; displace_y=-1; direction=oblique_2; break; case oblique_2: displace_x=displace_y=1; direction=horizontal; break; case horizontal: displace_x=1; displace_y=0; direction=vertical; break; case vertical: displace_x=0; displace_y=1; direction=nil; break; } x=locX+displace_x; y=locY+displace_y; while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==check) { count=count+1; x=x+displace_x; y=y+displace_y; } x=locX-displace_x; y=locY-displace_y; while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==check) { count=count+1; x=x-displace_x; y=y-displace_y; } if(count>=4) setMark(locX, locY); else if(direction!=nil) gobangAI4(); } private void gobangAI5() { for(int i=0; i<length; i++) for(int j=0; j<length; j++) { if(turn) break; if(grid[i][j]==-1) { direction=oblique_1; locX=i; locY=j; gobangAI5_2(); } } } /* 璸衡硈絬フ耞糷 */ private void gobangAI5_2() { count=0; switch(direction) { case oblique_1: displace_x=1; displace_y=-1; direction=oblique_2; break; case oblique_2: displace_x=displace_y=1; direction=horizontal; break; case horizontal: displace_x=1; displace_y=0; direction=vertical; break; case vertical: displace_x=0; displace_y=1; direction=nil; break; } x=locX+displace_x; y=locY+displace_y; while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0 && count<4) { count=count+1; x=x+displace_x; y=y+displace_y; } x=locX-displace_x; y=locY-displace_y; if(count==4 && x>=0 && x<length && y>=0 && y<length && grid[x][y]==0) setMark(locX+displace_x, locY+displace_y); else if(count>1) { count = count==4? 3: count; while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0 && count<4) { count=count+1; x=x-displace_x; y=y-displace_y; } if(count==4) setMark(locX+displace_x, locY+displace_y); else if(direction!=nil) gobangAI5_2(); } else if(direction!=nil) gobangAI5_2(); } private boolean gobang_SpaceAI(int x, int y) /* 璸衡逞緇フ竚 */ { int space=0; do { space=space+1; x=x+displace_x; y=y+displace_y; }while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0 && space<4); if(space+count>=5) /* 逞緇フ场だΤ硈絬ぇ */ return true; else { space=0; x=locX-displace_x; y=locY-displace_y; while(x>=0 && x<length && y>=0 && y<length && grid[x][y]==0 && space<4) { space=space+1; x=x-displace_x; y=y-displace_y; } if(space+count>=5) /* 逞緇フ场だΤ硈絬ぇ */ return true; else return false; } } public void ThreadStart() { new Thread(this).start(); } private void setMark(int x, int y) { steps.add(grids[x][y]); grids[x][y].setValue(-1); WinCheck(); turn=true; } /* 璸衡êよΤ隔 */ private void setMark2(int x, int y) { int space=0, temp_x=x, temp_y=y; do { space=space+1; temp_x=temp_x+displace_x; temp_y=temp_y+displace_y; }while(temp_x>=0 && temp_x<length && temp_y>=0 && temp_y<length && grid[temp_x][temp_y]==0 && space<4); if(space+step>=5) setMark(x, y); else setMark(x-(step+1)*displace_x, y-(step+1)*displace_y); /* э癸翴 */ } public void run() { try { switch(game_state) { case Start: Thread.sleep(2000); dialog.show(); game_state=Playing; repaint(); break; case End: repaint(); Thread.sleep(1500); ReStart(); repaint(); break; } } catch(InterruptedException ex) { } } public void paint(Graphics g) { super.paint(g); switch(game_state) { case Start: g.drawString("2005.7 by Yu Lin Tao", 91, 240); g.setFont(font); g.setColor(Color.BLUE); g.drawString("Gobang", 112, 120); g.drawImage(title, 134, 135, this); break; case Playing: case End: g.drawString("產: 筿福:", 105, 40); g.drawImage(black, 132, 30, this); g.drawImage(white, 182, 30, this); if(winner!=0) { g.setFont(font); g.setColor(Color.RED); message = winner==1? "墓":"块"; g.drawString(message, 120, 185); } break; } } public void undo() { if(steps.size()>0) { for(int i=0; i<2; i++) { ((Grid)steps.get(steps.size()-1)).Initial(); steps.remove(steps.size()-1); } } } private void Save() { String str; try { File file = new File("innings.men"); file.createNewFile(); BufferedWriter write = new BufferedWriter(new FileWriter(file)); for(int i=0; i<steps.size(); i++) { str=(((Grid)steps.get(i)).getLocX())+","+(((Grid)steps.get(i)).getLocY())+","+(((Grid)steps.get(i)).getValue()); write.write(str); write.newLine(); } write.close(); } catch(Exception ex) { } } private void Load() { try { String[] step_array; String str; File file = new File("innings.men"); if(!file.exists()) { JOptionPane.showMessageDialog(null, "⊿Τ郎"); return; } BufferedReader read = new BufferedReader(new FileReader(file)); ReStart(); while(read.ready()) { str=read.readLine(); step_array=str.split(","); grids[Integer.parseInt(step_array[0])][Integer.parseInt(step_array[1])].setValue(Integer.parseInt(step_array[2])); steps.add(grids[Integer.parseInt(step_array[0])][Integer.parseInt(step_array[1])]); } } catch(Exception ex) { } } private class Grid extends JPanel implements MouseListener { int x, y, value; boolean selected; public Grid(int x, int y) { this.x=x; this.y=y; addMouseListener(this); } public void mousePressed(MouseEvent event) { if(game_state==Playing) { int button=event.getButton(); if(button==MouseEvent.BUTTON1) { if(value==0) { steps.add(this); setValue(1); WinCheck(); turn=false; if(game_state==Playing) gobangAI(); } } else control_menu.show(this, event.getX(), event.getY()); } } public void mouseEntered(MouseEvent event) { if(game_state==Playing) setSelected(true); } public void mouseExited(MouseEvent event) { if(game_state==Playing) setSelected(false); } public void mouseClicked(MouseEvent event) { } public void mouseReleased(MouseEvent event) { } public Dimension getPreferredSize() { return new Dimension(20, 20); } public Dimension getMinimumSize() { return getPreferredSize(); } public int getLocX() { return x; } public int getLocY() { return y; } public int getValue() { return value; } public void Initial() { value=grid[x][y]=0; selected=false; repaint(); } public void setValue(int new_value) { locX=x; locY=y; value=grid[x][y]=new_value; repaint(); } public void setSelected(boolean select) { selected=select; repaint(); } public void paintComponent(Graphics g) { super.paintComponent(g); if(game_state!=Start && game_state!=Select) { g.drawLine(0, 10, 19, 10); g.drawLine(10, 0, 10, 19); /* 礶娩絬 */ g.setColor(Color.BLUE); if(x==0) g.drawLine(0, 0, 19, 0); else if(x==length-1) g.drawLine(0, 19, 19, 19); if(y==0) g.drawLine(19, 0, 19, 19); else if(y==length-1) g.drawLine(0, 0, 0, 19); if(selected) setBackground(Color.WHITE); else setBackground(Color.LIGHT_GRAY); } //g.drawString(x+" "+y, 1, 10); if(value!=0) { temp = value==1? black: white; g.drawImage(temp, 4, 4, this); } } } }
在 C++ 中,可以使用不同的图形库来绘制直线,如 WinAPI、OpenGL、Qt、SDL 等等。这里以 WinAPI 为例,介绍如何在 C++ 中使用 WinAPI 绘制直线。 1. 包含 Windows.h 头文件: ```c++ #include <Windows.h> ``` 2. 定义窗口过程: ```c++ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); HPEN hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0)); // 创建一支红色的画笔 HPEN hOldPen = (HPEN)SelectObject(hdc, hPen); // 选择画笔 MoveToEx(hdc, 100, 100, NULL); // 移动画笔到起点 LineTo(hdc, 200, 200); // 绘制直线 SelectObject(hdc, hOldPen); // 恢复原来的画笔 DeleteObject(hPen); // 删除画笔 EndPaint(hWnd, &ps); break; } case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } ``` 3. 创建窗口: ```c++ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { const char* CLASS_NAME = "MyWindowClass"; WNDCLASS wc = {}; wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; RegisterClass(&wc); HWND hWnd = CreateWindowEx( 0, CLASS_NAME, "My Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL ); if (hWnd == NULL) return 0; ShowWindow(hWnd, nCmdShow); MSG msg = {}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } ``` 4. 在窗口过程中处理 WM_PAINT 消息,调用 WinAPI 绘制直线: ```c++ case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); HPEN hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0)); // 创建一支红色的画笔 HPEN hOldPen = (HPEN)SelectObject(hdc, hPen); // 选择画笔 MoveToEx(hdc, 100, 100, NULL); // 移动画笔到起点 LineTo(hdc, 200, 200); // 绘制直线 SelectObject(hdc, hOldPen); // 恢复原来的画笔 DeleteObject(hPen); // 删除画笔 EndPaint(hWnd, &ps); break; } ``` 完整的代码如下: ```c++ #include <Windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); HPEN hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0)); // 创建一支红色的画笔 HPEN hOldPen = (HPEN)SelectObject(hdc, hPen); // 选择画笔 MoveToEx(hdc, 100, 100, NULL); // 移动画笔到起点 LineTo(hdc, 200, 200); // 绘制直线 SelectObject(hdc, hOldPen); // 恢复原来的画笔 DeleteObject(hPen); // 删除画笔 EndPaint(hWnd, &ps); break; } case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { const char* CLASS_NAME = "MyWindowClass"; WNDCLASS wc = {}; wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; RegisterClass(&wc); HWND hWnd = CreateWindowEx( 0, CLASS_NAME, "My Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL ); if (hWnd == NULL) return 0; ShowWindow(hWnd, nCmdShow); MSG msg = {}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } ``` 该程序会创建一个窗口,并在窗口中绘制一条从 (100, 100) 到 (200, 200) 的红色直线。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值