我是Win32 API的新手,我正在尝试学习我的空闲时间。我进展顺利,但今天我遇到了菜单。我意识到有两种不同的方式(我目前都知道)我可以在Win32中实现一个菜单。我可以在import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
JPanel p = new JPanel();
p.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
JLabel l = new JLabel("First Name");
p.add(l, gbc);
JTextField j = new JTextField(12);
gbc.gridx++;
p.add(j, gbc);
gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = GridBagConstraints.REMAINDER;
JRadioButton j1 = new JRadioButton("Male");
JRadioButton j2 = new JRadioButton("Female");
ButtonGroup bg = new ButtonGroup();
bg.add(j1);
bg.add(j2);
JPanel buttons = new JPanel();
buttons.add(j1);
buttons.add(j2);
p.add(buttons, gbc);
gbc.gridy++;
gbc.insets = new Insets(100, 0, 0, 0);
JButton b = new JButton("Submit");
p.add(b, gbc);
JScrollPane jp = new JScrollPane(p);
frame.add(jp, BorderLayout.CENTER);
//frame.pack();
// This is just to force the point
frame.setSize(250, 100);
frame.setVisible(true);
}
});
}
}
内的AppendMenu
中使用WM_CREATE
,或者我可以在WndProc
中创建一个菜单,例如:
resource.rc
我的问题是:要么是实施的方法,要么是更好的"比另一个。通过"更好"我的意思是代码比其他代码更加模块化或可扩展?是否有使用它们的好处/缺点?
提前感谢您的贡献!
答案 0 :(得分:2)
与代码相比,资源文件往往更清晰地说明正在完成的工作,例如,与AppendMenu / InsertMenu调用相比,使用BEGIN ... END块更容易看到布局。
与在代码中执行相同任务相比,使用资源还可以让您更轻松地进行翻译。在这种情况下,您可以创建资源,将字符串翻译为目标语言,而数字标识符在所有版本中都相同。这适用于所有资源类型(对话框,字符串和消息表,甚至图标),而不仅仅是菜单。