Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

12下一頁(yè)
返回列表 發(fā)新帖
查看: 5843|回復(fù): 11
打印 上一主題 下一主題

[窗體] Access能使用GDI+API編程嗎?

[復(fù)制鏈接]

點(diǎn)擊這里給我發(fā)消息

跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2014-9-6 11:13:29 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我在VB6里面可以正?吹紾DI+編程的效果,如下圖


以下是轉(zhuǎn)換到ACCESS里后的代碼,運(yùn)行時(shí)沒(méi)任何反應(yīng),也沒(méi)有任何出錯(cuò)提示,不知道是何原因,有誰(shuí)知道的嗎?是否ACCESS的窗體不支持GDI+?
  1. Private TOKEN As Long
  2. Private Graphics As Long
  3. Dim pen As Long, brush As Long

  4. Private Sub Command0_Click()
  5.   Dim p1 As POINTF, p2 As POINTF
  6.    
  7.   InitGDIPlus

  8.   GdipCreateFromHWND Me.Hwnd, Graphics
  9.   GdipSetSmoothingMode Graphics, SmoothingModeAntiAlias
  10.    
  11.   GdipCreatePen1 &HFFFF0000, 500, UnitPixel, pen
  12.   GdipDrawLineI Graphics, pen, 10, 10, 4000, 2000
  13.    
  14.   GdipCreatePen1 &HFFFF0000, 1, UnitPixel, pen
  15.   GdipDrawRectangleI Graphics, pen, 30, 30, 2000, 2000
  16.    
  17.   GdipCreateSolidFill &HAA0000FF, brush
  18.   GdipFillRectangleI Graphics, brush, 30, 30, 2000, 2000
  19.   GdipDrawRectangleI Graphics, pen, 30, 30, 200, 2000
  20.    
  21.   p1.X = 10
  22.   p1.Y = 10
  23.   p2.X = 2000
  24.   p2.Y = 1000
  25.    
  26.   GdipCreateLineBrush p1, p2, &H8AFF00FF, &HFFFF0000, WrapModeTileFlipXY, brush
  27.   GdipFillEllipseI Graphics, brush, p1.X, p1.Y, p2.X - p1.X, p2.Y - p1.X

  28.   Me.Repaint
  29. End Sub

  30. Private Sub Form_Unload(Cancel As Integer)
  31.   GdipDeletePen pen
  32.   GdipDeleteBrush brush
  33.   TerminateGDIPlus
  34. End Sub

  35. Private Sub TerminateGDIPlus()
  36.   GdipDeleteGraphics Graphics
  37.   GdiplusShutdown TOKEN
  38. End Sub

  39. Private Sub InitGDIPlus()
  40.   Dim uInput As GdiplusStartupInput
  41.    
  42.   uInput.GdiplusVersion = 1
  43.   If GdiplusStartup(TOKEN, uInput) <> Ok Then
  44.     MsgBox "GDI+ 初始化錯(cuò)誤。程序即將關(guān)閉。", vbCritical, "InitError"
  45.     End
  46.   End If
  47. End Sub
復(fù)制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享分享 分享淘帖 訂閱訂閱

點(diǎn)擊這里給我發(fā)消息

推薦
發(fā)表于 2014-9-14 19:14:57 | 只看該作者
首先,access窗體始終有3個(gè)節(jié),頁(yè)眉、主體、頁(yè)腳,即使在設(shè)計(jì)視圖中沒(méi)有,用FindWindowEx也能找到3個(gè)。
所以如果是使用主體節(jié)作畫(huà),則要FindWindowEx兩次得到主體節(jié)句柄,具體請(qǐng)百度FindWindowEx的用法。
另外不要使用 Me.Repaint ,刷新窗體后在上面畫(huà)的東西就沒(méi)有了。

點(diǎn)擊這里給我發(fā)消息

2#
發(fā)表于 2014-9-6 17:24:21 | 只看該作者
這個(gè)你要請(qǐng)教 t小寶,他是圖片專(zhuān)家

點(diǎn)擊這里給我發(fā)消息

3#
發(fā)表于 2014-9-7 05:12:52 來(lái)自手機(jī) | 只看該作者
這個(gè)用了什么庫(kù),不是win Api直接寫(xiě)的吧

點(diǎn)擊這里給我發(fā)消息

4#
發(fā)表于 2014-9-9 22:54:50 | 只看該作者
tmtony 發(fā)表于 2014-9-6 17:24
這個(gè)你要請(qǐng)教 t小寶,他是圖片專(zhuān)家

王站過(guò)獎(jiǎng)了,不敢當(dāng)啊。。。
要在access窗體上畫(huà)圖,不能使用Me.Hwnd,因?yàn)閍ccess有個(gè)神密的東西叫節(jié),節(jié)覆蓋在窗體上,所有的控件都在節(jié)上面顯示,所以要在節(jié)上作畫(huà),可通過(guò)FindWindowEx取得節(jié)句柄,節(jié)的類(lèi)名是OFormSub

點(diǎn)擊這里給我發(fā)消息

5#
發(fā)表于 2014-9-13 08:41:24 | 只看該作者
贊一下!
回復(fù)

使用道具 舉報(bào)

點(diǎn)擊這里給我發(fā)消息

6#
發(fā)表于 2014-9-14 06:42:56 來(lái)自手機(jī) | 只看該作者
贊一個(gè)!
回復(fù)

使用道具 舉報(bào)

點(diǎn)擊這里給我發(fā)消息

7#
 樓主| 發(fā)表于 2014-9-14 11:32:36 | 只看該作者
我把按鈕單擊代碼更換了下,但是還是沒(méi)有效果,困惑!
  1. Private Sub Command0_Click()
  2.   Dim p1 As POINTF, p2 As POINTF
  3.   
  4.   InitGDIPlus

  5.   GdipCreateFromHWND FindWindowEx(Me.hwnd, 0&, "OFormSub", vbNullString), graphics
  6.   GdipSetSmoothingMode graphics, SmoothingModeAntiAlias
  7.   
  8.   GdipCreatePen1 &HFFFF0000, 500, UnitPixel, pen
  9.   GdipDrawLineI graphics, pen, 10, 10, 4000, 2000
  10.   
  11.   GdipCreatePen1 &HFFFF0000, 1, UnitPixel, pen
  12.   GdipDrawRectangleI graphics, pen, 30, 30, 2000, 2000
  13.   
  14.   GdipCreateSolidFill &HAA0000FF, brush
  15.   GdipFillRectangleI graphics, brush, 30, 30, 2000, 2000
  16.   GdipDrawRectangleI graphics, pen, 30, 30, 200, 2000
  17.   
  18.   p1.X = 10
  19.   p1.Y = 10
  20.   p2.X = 2000
  21.   p2.Y = 1000
  22.   
  23.   GdipCreateLineBrush p1, p2, &H8AFF00FF, &HFFFF0000, WrapModeTileFlipXY, brush
  24.   GdipFillEllipseI graphics, brush, p1.X, p1.Y, p2.X - p1.X, p2.Y - p1.X

  25.   Me.Repaint
  26. End Sub
復(fù)制代碼

點(diǎn)擊這里給我發(fā)消息

8#
 樓主| 發(fā)表于 2014-9-14 11:33:34 | 只看該作者
zpy2 發(fā)表于 2014-9-7 05:12
這個(gè)用了什么庫(kù),不是win Api直接寫(xiě)的吧

這個(gè)要引用gdiplus.dll

點(diǎn)擊這里給我發(fā)消息

10#
 樓主| 發(fā)表于 2014-9-15 13:55:12 | 只看該作者
感謝小寶版主,修改后,測(cè)試成功~

修改后的按鈕單擊代碼如下:
  1. Private Sub Command0_Click()
  2.   Dim p1 As POINTF, p2 As POINTF
  3.   Dim tempHwnd As Long
  4.   
  5.   InitGDIPlus
  6.   
  7.   tempHwnd = FindWindowEx(Me.hwnd, 0&, "OFormSub", vbNullString)
  8.   tempHwnd = FindWindowEx(Me.hwnd, tempHwnd, "OFormSub", vbNullString)

  9.   GdipCreateFromHWND tempHwnd, graphics
  10.   GdipSetSmoothingMode graphics, SmoothingModeAntiAlias
  11.   
  12.   GdipCreatePen1 &HFFFF0000, 1, UnitPixel, pen
  13.   GdipDrawLineI graphics, pen, 1, 1, 400, 200
  14.   
  15.   GdipCreatePen1 &HFFFF0000, 1, UnitPixel, pen
  16.   GdipDrawRectangleI graphics, pen, 30, 30, 200, 200
  17.   
  18.   GdipCreateSolidFill &HAA0000FF, brush
  19.   GdipFillRectangleI graphics, brush, 30, 30, 200, 200
  20.   GdipDrawRectangleI graphics, pen, 30, 30, 200, 200
  21.   
  22.   p1.X = 10
  23.   p1.Y = 10
  24.   p2.X = 200
  25.   p2.Y = 100
  26.   
  27.   GdipCreateLineBrush p1, p2, &H8AFF00FF, &HFFFF0000, WrapModeTileFlipXY, brush
  28.   GdipFillEllipseI graphics, brush, p1.X, p1.Y, p2.X - p1.X, p2.Y - p1.X

  29. End Sub
復(fù)制代碼



本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

x
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-17 04:50 , Processed in 0.088058 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表